re PR c++/54777 ([C++11] Comma operator in constexpr environment can cause ICE)
PR c++/54777 * semantics.c (cxx_eval_constant_expression) <case COMPOUND_EXPR>: If not ignoring the second operand, pass the original second operand and not one with stripped nops to cxx_eval_constant_expression. * g++.dg/cpp0x/constexpr-ref4.C: New test. From-SVN: r192036
This commit is contained in:
parent
2352eadb81
commit
75ab707c75
@ -1,3 +1,10 @@
|
||||
2012-10-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/54777
|
||||
* semantics.c (cxx_eval_constant_expression) <case COMPOUND_EXPR>: If
|
||||
not ignoring the second operand, pass the original second operand
|
||||
and not one with stripped nops to cxx_eval_constant_expression.
|
||||
|
||||
2012-10-01 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl.c (check_initializer): Set DECL_NONTRIVIALLY_INITIALIZED_P
|
||||
|
@ -7740,6 +7740,7 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
|
||||
/* Check that the LHS is constant and then discard it. */
|
||||
cxx_eval_constant_expression (call, op0, allow_non_constant,
|
||||
false, non_constant_p);
|
||||
op1 = TREE_OPERAND (t, 1);
|
||||
r = cxx_eval_constant_expression (call, op1, allow_non_constant,
|
||||
addr, non_constant_p);
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-10-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/54777
|
||||
* g++.dg/cpp0x/constexpr-ref4.C: New test.
|
||||
|
||||
2012-10-02 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/54778
|
||||
|
18
gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
Normal file
18
gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/54777
|
||||
// { dg-options -std=c++0x }
|
||||
|
||||
struct S
|
||||
{
|
||||
int s[1];
|
||||
constexpr const int &foo (unsigned i) { return (i < 1 ? 0 : throw 1), s[i]; }
|
||||
constexpr const int &bar (unsigned i) { return i < 1 ? s[i] : (throw 0, s[i]); }
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
constexpr S a {};
|
||||
constexpr int i = a.foo (0);
|
||||
constexpr int j = a.bar (0);
|
||||
static_assert (i == j, "Ouch");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user