aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1999-08-24 21:23:56 +0000
committerJason Merrill <jason@gcc.gnu.org>1999-08-24 17:23:56 -0400
commitdf39af7db0b1ee818dc03898ac4466633ae7ebbc (patch)
treea9b7aea66e557f7c4f7223a33f5f810f95ed6a0b
parent2ac84cfe01bfb92a83f18263740435f696321e32 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/cp/error.c8
-rw-r--r--gcc/cp/typeck.c22
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