Commit d49b0aa0 by Marek Polacek

re PR c++/70153 (ICE on valid C++ code)

	PR c++/70153
	* cp-gimplify.c (cp_fold): Handle UNARY_PLUS_EXPR.

	* g++.dg/delayedfold/unary-plus1.C: New test.

From-SVN: r234111
parent c81e3837
2016-03-10 Marek Polacek <polacek@redhat.com>
PR c++/70153
* cp-gimplify.c (cp_fold): Handle UNARY_PLUS_EXPR.
2016-03-09 Cesar Philippidis <cesar@codesourcery.com> 2016-03-09 Cesar Philippidis <cesar@codesourcery.com>
* parser.c (cp_parser_oacc_loop): Update cclauses and clauses * parser.c (cp_parser_oacc_loop): Update cclauses and clauses
......
...@@ -1996,7 +1996,6 @@ cp_fold (tree x) ...@@ -1996,7 +1996,6 @@ cp_fold (tree x)
case BIT_NOT_EXPR: case BIT_NOT_EXPR:
case TRUTH_NOT_EXPR: case TRUTH_NOT_EXPR:
case FIXED_CONVERT_EXPR: case FIXED_CONVERT_EXPR:
case UNARY_PLUS_EXPR:
case INDIRECT_REF: case INDIRECT_REF:
loc = EXPR_LOCATION (x); loc = EXPR_LOCATION (x);
...@@ -2016,6 +2015,14 @@ cp_fold (tree x) ...@@ -2016,6 +2015,14 @@ cp_fold (tree x)
|| !VOID_TYPE_P (TREE_TYPE (TREE_OPERAND (x, 0)))); || !VOID_TYPE_P (TREE_TYPE (TREE_OPERAND (x, 0))));
break; break;
case UNARY_PLUS_EXPR:
op0 = cp_fold_rvalue (TREE_OPERAND (x, 0));
if (op0 == error_mark_node)
x = error_mark_node;
else
x = fold_convert (TREE_TYPE (x), op0);
break;
case POSTDECREMENT_EXPR: case POSTDECREMENT_EXPR:
case POSTINCREMENT_EXPR: case POSTINCREMENT_EXPR:
case INIT_EXPR: case INIT_EXPR:
......
2016-03-10 Andre Vieira <andre.simoesdiasvieira@arm.com> 2016-03-10 Marek Polacek <polacek@redhat.com>
PR c++/70153
* g++.dg/delayedfold/unary-plus1.C: New test.
2016-03-10 Andre Vieira <andre.simoesdiasvieira@arm.com>
* gcc.target/arm/pr45701-1.c: Escape brackets. * gcc.target/arm/pr45701-1.c: Escape brackets.
* gcc.target/arm/pr45701-2.c: Likewise. * gcc.target/arm/pr45701-2.c: Likewise.
......
// PR c++/70153
// { dg-do run }
unsigned long long int
fn1 (unsigned long long int i)
{
return 2ULL * ((1 + (unsigned long int) +1) * i);
}
unsigned long long int
fn2 (unsigned long long int i)
{
return 2ULL * ((1 + (unsigned long int) +(1 + 0)) * i);
}
int
main (void)
{
if (fn1 (3ULL) != 12ULL
|| fn2 (3ULL) != 12ULL)
__builtin_abort ();
}
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