From 974c6fd7fa75d24b6aa7387bd5aacff11fe8b5d9 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 7 May 2003 15:00:10 +0000
Subject: [PATCH]         * call.c (build_conditional_expr): Don't assume that
 the folded         expression has result_type.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66561 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog | 5 +++++
 gcc/cp/call.c    | 9 ++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 15ca7a650133..4955d64a83e2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2003-05-07  Jason Merrill  <jason@redhat.com>
+
+	* call.c (build_conditional_expr): Don't assume that the folded
+	expression has result_type.
+
 2003-05-06  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
 	* typeck.c (build_unary_op): Deal with const qualifier in
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 44683ff5b834..5d7e3dfe9638 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -3530,16 +3530,19 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
 
  valid_operands:
   result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
+  /* We can't use result_type below, as fold might have returned a
+     throw_expr.  */
+
   /* Expand both sides into the same slot, hopefully the target of the
      ?: expression.  We used to check for TARGET_EXPRs here, but now we
      sometimes wrap them in NOP_EXPRs so the test would fail.  */
-  if (!lvalue_p && IS_AGGR_TYPE (result_type))
-    result = build_target_expr_with_type (result, result_type);
+  if (!lvalue_p && IS_AGGR_TYPE (TREE_TYPE (result)))
+    result = get_target_expr (result);
   
   /* If this expression is an rvalue, but might be mistaken for an
      lvalue, we must add a NON_LVALUE_EXPR.  */
   if (!lvalue_p && real_lvalue_p (result))
-    result = build1 (NON_LVALUE_EXPR, result_type, result);
+    result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
 
   return result;
 }
-- 
GitLab