Commit 3f7c7453 by Jason Merrill Committed by Jason Merrill

re PR c++/47570 ([C++0x] "one() >= 0" isn't constexpr for unsigned int, yet == and > is.)

	PR c++/47570
	* semantics.c (cxx_eval_constant_expression) [COMPOUND_EXPR]: Don't
	use the generic binary expression handling.

From-SVN: r171083
parent ab958d7c
2011-03-16 Jason Merrill <jason@redhat.com>
PR c++/47570
* semantics.c (cxx_eval_constant_expression) [COMPOUND_EXPR]: Don't
use the generic binary expression handling.
2011-03-16 Diego Novillo <dnovillo@google.com>
* Make-lang.in (CXX_PARSER_H): New.
......
......@@ -6915,7 +6915,13 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
r = cxx_eval_constant_expression (call, op0, allow_non_constant,
addr, non_constant_p);
else
goto binary;
{
/* Check that the LHS is constant and then discard it. */
cxx_eval_constant_expression (call, op0, allow_non_constant,
false, non_constant_p);
r = cxx_eval_constant_expression (call, op1, allow_non_constant,
addr, non_constant_p);
}
}
break;
......@@ -6957,7 +6963,6 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
case UNEQ_EXPR:
case RANGE_EXPR:
case COMPLEX_EXPR:
binary:
r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
non_constant_p);
break;
......
2011-03-16 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/constexpr-47570.C: New.
2011-03-16 Dodji Seketeli <dodji@redhat.com>
PR debug/47510
......
// PR c++/47570
// { dg-options -std=c++0x }
unsigned int constexpr one()
{ return 1; }
int constexpr one_B()
{ return 1; }
int main()
{
// FAIL TO COMPILE:
static bool constexpr SC_huh1 = ((unsigned int)one()) >= ((unsigned int)0);
static bool constexpr SC_huh2 = one() >= ((unsigned int)0);
static bool constexpr SC_huh3 = one() >= 0;
// COMPILE OK:
static bool constexpr SC_huh4 = ((one() == 0) || (one() > 0));
static bool constexpr SC_huh5 = one() == 0;
static bool constexpr SC_huh6 = one() > 0;
static bool constexpr SC_huh7 = one_B() >= 0;
static bool constexpr SC_huh8 = one() >= 1;
return SC_huh3;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment