From: jakub Date: Tue, 29 Apr 2008 08:54:45 +0000 (+0000) Subject: PR c++/35987 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=22053f42429409f4b2cd58530432c8def29a8f64;p=thirdparty%2Fgcc.git PR c++/35987 * typeck.c (cp_build_modify_expr) : Don't build COMPOUND_EXPR if the second argument would be error_mark_node. * g++.dg/other/error28.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134786 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 368348a3d95a..15aa14ca4f05 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-04-29 Jakub Jelinek + + PR c++/35987 + * typeck.c (cp_build_modify_expr) : Don't build + COMPOUND_EXPR if the second argument would be error_mark_node. + 2008-04-28 Jason Merrill Liu Guanwei diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 42779562a88d..bf264ad2cc73 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5945,10 +5945,11 @@ cp_build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs, lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs), stabilize_reference (TREE_OPERAND (lhs, 0)), TREE_OPERAND (lhs, 1)); - return build2 (COMPOUND_EXPR, lhstype, - lhs, - cp_build_modify_expr (TREE_OPERAND (lhs, 0), - modifycode, rhs, complain)); + newrhs = cp_build_modify_expr (TREE_OPERAND (lhs, 0), + modifycode, rhs, complain); + if (newrhs == error_mark_node) + return error_mark_node; + return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs); /* Handle (a, b) used as an "lvalue". */ case COMPOUND_EXPR: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4ac8b14be5e3..1154c105c9e6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-04-29 Jakub Jelinek + + PR c++/35987 + * g++.dg/other/error28.C: New test. + 2008-04-28 Uros Bizjak PR target/36073 diff --git a/gcc/testsuite/g++.dg/other/error28.C b/gcc/testsuite/g++.dg/other/error28.C new file mode 100644 index 000000000000..5ac15b7de1ee --- /dev/null +++ b/gcc/testsuite/g++.dg/other/error28.C @@ -0,0 +1,8 @@ +// PR c++/35987 +// { dg-do compile } + +void +foo (char *p) +{ + if (++p = true); // { dg-error "cannot convert" } +}