diff options
author | Richard Stallman <rms@gnu.org> | 1993-10-01 22:49:56 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-10-01 22:49:56 +0000 |
commit | e4623f4f570170f9d0cd6929673e6ab121f349ce (patch) | |
tree | 055a2f5afb83282401de3ab8ad989a8e004df47d | |
parent | a7fd196c670dde3de2867483b0bb5eec17b7eeda (diff) | |
download | gcc-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.c | 14 |
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); } |