re PR c++/84138 (ICE folding broken constant)

PR c++/84138
	* cp-gimplify.c (cp_fold): Check if X is an error node before
	calling useless_type_conversion_p.

	* g++.dg/diagnostic/pr84138.C: New test.

From-SVN: r257240
This commit is contained in:
Marek Polacek 2018-01-31 15:37:18 +00:00 committed by Marek Polacek
parent bcec133fa9
commit 4ecd9c156c
4 changed files with 20 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2018-01-31 Marek Polacek <polacek@redhat.com>
PR c++/84138
* cp-gimplify.c (cp_fold): Check if X is an error node before
calling useless_type_conversion_p.
2018-01-30 Jason Merrill <jason@redhat.com>
PR c++/84091 - ICE with local class in lambda in template.

View File

@ -2356,6 +2356,7 @@ cp_fold (tree x)
/* A COND_EXPR might have incompatible types in branches if one or both
arms are bitfields. If folding exposed such a branch, fix it up. */
if (TREE_CODE (x) != code
&& x != error_mark_node
&& !useless_type_conversion_p (TREE_TYPE (org_x), TREE_TYPE (x)))
x = fold_convert (TREE_TYPE (org_x), x);

View File

@ -1,3 +1,8 @@
2018-01-31 Marek Polacek <polacek@redhat.com>
PR c++/84138
* g++.dg/diagnostic/pr84138.C: New test.
2018-01-31 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/78534

View File

@ -0,0 +1,8 @@
// PR c++/84138
char
foo()
{
const int i = 0 = 0; // { dg-error "lvalue required as left operand" }
return 1 ? 0 : (char)i;
} // { dg-warning "control reaches" }