From: Jason Merrill Date: Thu, 26 Mar 2015 17:58:39 +0000 (-0400) Subject: re PR c++/65525 (ICE: sorry, unimplemented: unexpected AST of kind mem_ref (-std... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41b38772ccd584a384945c7b1fdd61f4712d9792;p=gcc.git re PR c++/65525 (ICE: sorry, unimplemented: unexpected AST of kind mem_ref (-std=c++14, ICE: in potential_constant_expression_1, at cp/constexpr.c:4432)) PR c++/65525 * constexpr.c (potential_constant_expression_1): Handle MEM_REF. From-SVN: r221699 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4ba45d72c6a..e3699f63c04 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2015-03-26 Jason Merrill + + PR c++/65525 + * constexpr.c (potential_constant_expression_1): Handle MEM_REF. + 2015-03-25 Marek Polacek PR c++/65558 diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 37b619d56ff..2f094721546 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -4395,6 +4395,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, case ARRAY_RANGE_REF: case MEMBER_REF: case DOTSTAR_EXPR: + case MEM_REF: binary: for (i = 0; i < 2; ++i) if (!RECUR (TREE_OPERAND (t, i), want_rval)) diff --git a/gcc/testsuite/g++.dg/parse/assign1.C b/gcc/testsuite/g++.dg/parse/assign1.C new file mode 100644 index 00000000000..c0138c1449b --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/assign1.C @@ -0,0 +1,22 @@ +// PR c++/65525 + +struct A +{ + int x; + char y; // Actually, short and bool (types smaller than int?) trigger this ICE too + // Also: the problem doesn't occur if you put the smaller type first, e.g. "char x; int y;" + + A(int x) {} // custom ctor needed for ICE +}; + +int main() +{ + A a(0), x(1), y(2); + + x = a; // OK + y = a; // OK + x = y = a; // ICE: sorry, unimplemented: unexpected AST of kind mem_ref + // internal compiler error: in potential_constant_expression_1, at cp/constexpr.c:4432 + + return 0; +}