aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-10-01 22:49:56 +0000
committerRichard Stallman <rms@gnu.org>1993-10-01 22:49:56 +0000
commite4623f4f570170f9d0cd6929673e6ab121f349ce (patch)
tree055a2f5afb83282401de3ab8ad989a8e004df47d
parenta7fd196c670dde3de2867483b0bb5eec17b7eeda (diff)
downloadgcc-e4623f4f570170f9d0cd6929673e6ab121f349ce.zip
gcc-e4623f4f570170f9d0cd6929673e6ab121f349ce.tar.gz
gcc-e4623f4f570170f9d0cd6929673e6ab121f349ce.tar.bz2
(build_modify_expr): Check whether recursive calls return error_mark_node.
From-SVN: r5550
-rw-r--r--gcc/c-typeck.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 9cd22c8..483119a 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -4142,11 +4142,13 @@ build_modify_expr (lhs, modifycode, rhs)
/* Handle (a, b) used as an "lvalue". */
case COMPOUND_EXPR:
pedantic_lvalue_warning (COMPOUND_EXPR);
+ newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
+ modifycode, rhs);
+ if (TREE_CODE (newrhs) == ERROR_MARK)
+ return error_mark_node;
return build (COMPOUND_EXPR, lhstype,
- TREE_OPERAND (lhs, 0),
- build_modify_expr (TREE_OPERAND (lhs, 1),
- modifycode, rhs));
-
+ TREE_OPERAND (lhs, 0), newrhs);
+
/* Handle (a ? b : c) used as an "lvalue". */
case COND_EXPR:
pedantic_lvalue_warning (COND_EXPR);
@@ -4161,6 +4163,8 @@ build_modify_expr (lhs, modifycode, rhs)
modifycode, rhs),
build_modify_expr (TREE_OPERAND (lhs, 2),
modifycode, rhs));
+ if (TREE_CODE (cond) == ERROR_MARK)
+ return cond;
/* Make sure the code to compute the rhs comes out
before the split. */
return build (COMPOUND_EXPR, TREE_TYPE (lhs),
@@ -4203,6 +4207,8 @@ build_modify_expr (lhs, modifycode, rhs)
result = build_modify_expr (inner_lhs, NOP_EXPR,
convert (TREE_TYPE (inner_lhs),
convert (lhstype, newrhs)));
+ if (TREE_CODE (result) == ERROR_MARK)
+ return result;
pedantic_lvalue_warning (CONVERT_EXPR);
return convert (TREE_TYPE (lhs), result);
}