diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1999-08-24 21:23:56 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1999-08-24 17:23:56 -0400 |
commit | df39af7db0b1ee818dc03898ac4466633ae7ebbc (patch) | |
tree | a9b7aea66e557f7c4f7223a33f5f810f95ed6a0b | |
parent | 2ac84cfe01bfb92a83f18263740435f696321e32 (diff) | |
download | gcc-df39af7db0b1ee818dc03898ac4466633ae7ebbc.zip gcc-df39af7db0b1ee818dc03898ac4466633ae7ebbc.tar.gz gcc-df39af7db0b1ee818dc03898ac4466633ae7ebbc.tar.bz2 |
call.c (build_conditional_expr): Fix typo.
* call.c (build_conditional_expr): Fix typo.
* typeck.c (build_modify_expr, COND_EXPR): Make sure we've got an
lvalue before trying to mess with the sides.
* error.c (dump_expr, CONVERT_EXPR): Handle (void) properly.
From-SVN: r28826
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/cp/error.c | 8 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 22 |
4 files changed, 32 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8ceb659..9f13fc9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +1999-08-24 Jason Merrill <jason@yorick.cygnus.com> + + * call.c (build_conditional_expr): Fix typo. + * typeck.c (build_modify_expr, COND_EXPR): Make sure we've got an + lvalue before trying to mess with the sides. + + * error.c (dump_expr, CONVERT_EXPR): Handle (void) properly. + Mon Aug 23 22:17:20 1999 Mumit Khan <khan@xraylith.wisc.edu> * g++spec.c (lang_specific_driver): Add room for NULL in arglist. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index f193a4b..eed211f 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -2825,7 +2825,7 @@ build_conditional_expr (arg1, arg2, arg3) if ((TREE_CODE (arg2) == THROW_EXPR) ^ (TREE_CODE (arg3) == THROW_EXPR)) result_type = ((TREE_CODE (arg2) == THROW_EXPR) - ? arg2_type : arg3_type); + ? arg3_type : arg2_type); else if (arg2_void_p && arg3_void_p) result_type = void_type_node; else diff --git a/gcc/cp/error.c b/gcc/cp/error.c index b6598ff..5b37717 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1547,7 +1547,13 @@ dump_expr (t, nop) break; case CONVERT_EXPR: - dump_unary_op ("+", t, nop); + if (same_type_p (TREE_TYPE (t), void_type_node)) + { + OB_PUTS ("(void)"); + dump_expr (TREE_OPERAND (t, 0), 0); + } + else + dump_unary_op ("+", t, nop); break; case ADDR_EXPR: diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 8ebeed3..cc476b2 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5734,12 +5734,22 @@ build_modify_expr (lhs, modifycode, rhs) /* Produce (a ? (b = rhs) : (c = rhs)) except that the RHS goes through a save-expr so the code to compute it is only emitted once. */ - tree cond - = build_conditional_expr (TREE_OPERAND (lhs, 0), - build_modify_expr (cp_convert (TREE_TYPE (lhs), TREE_OPERAND (lhs, 1)), - modifycode, rhs), - build_modify_expr (cp_convert (TREE_TYPE (lhs), TREE_OPERAND (lhs, 2)), - modifycode, rhs)); + tree cond; + + /* Check this here to avoid odd errors when trying to convert + a throw to the type of the COND_EXPR. */ + if (!lvalue_or_else (lhs, "assignment")) + return error_mark_node; + + cond = build_conditional_expr + (TREE_OPERAND (lhs, 0), + build_modify_expr (cp_convert (TREE_TYPE (lhs), + TREE_OPERAND (lhs, 1)), + modifycode, rhs), + build_modify_expr (cp_convert (TREE_TYPE (lhs), + TREE_OPERAND (lhs, 2)), + modifycode, rhs)); + if (cond == error_mark_node) return cond; /* Make sure the code to compute the rhs comes out |