re PR c++/13693 ([tree-ssa] build failure in mipsisa64-elf)
authorRichard Henderson <rth@redhat.com>
Fri, 30 Jan 2004 23:37:39 +0000 (15:37 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 30 Jan 2004 23:37:39 +0000 (15:37 -0800)
        PR c++/13693
        * method.c (use_thunk): Don't force_target_expr for void thunks.
        * tree.c (build_target_expr_with_type): Assert non-void type.
        (force_target_expr): Likewise.

From-SVN: r77008

gcc/cp/ChangeLog
gcc/cp/method.c
gcc/cp/tree.c

index 41bc855bb2d087bc61d0a4cfdb2e6ad234cfea96..825a6e505a17af9f8d2e41914ea58a9441658bab 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-30  Richard Henderson  <rth@redhat.com>
+
+        PR c++/13693
+        * method.c (use_thunk): Don't force_target_expr for void thunks.
+        * tree.c (build_target_expr_with_type): Assert non-void type.
+        (force_target_expr): Likewise.
+
 2004-01-30  Michael Matz  <matz@suse.de>
 
        * parser.c (cp_parser_labeled_statement): Accept case ranges.
index 106585571f90541ad942965816447affe43a3851..6acab3a902fa39b050f6a5a3c39d64ce0d2ee733 100644 (file)
@@ -487,15 +487,17 @@ use_thunk (tree thunk_fndecl, bool emit_p)
        t = tree_cons (NULL_TREE, a, t);
       t = nreverse (t);
       t = build_call (alias, t);
-      t = force_target_expr (TREE_TYPE (t), t);
-      if (!this_adjusting)
-       t = thunk_adjust (t, /*this_adjusting=*/0,
-                         fixed_offset, virtual_offset);
       
       if (VOID_TYPE_P (TREE_TYPE (t)))
        finish_expr_stmt (t);
       else
-       finish_return_stmt (t);
+       {
+         t = force_target_expr (TREE_TYPE (t), t);
+         if (!this_adjusting)
+           t = thunk_adjust (t, /*this_adjusting=*/0,
+                             fixed_offset, virtual_offset);
+         finish_return_stmt (t);
+       }
 
       /* Since we want to emit the thunk, we explicitly mark its name as
         referenced.  */
index bedbbe96b444bfdbd0ca65a5fb8ecc883fcf3808..7d9812856893bfe6718f145846567d1894414f8c 100644 (file)
@@ -318,6 +318,8 @@ build_target_expr_with_type (tree init, tree type)
 {
   tree slot;
 
+  my_friendly_assert (!VOID_TYPE_P (type), 20040130);
+
   if (TREE_CODE (init) == TARGET_EXPR)
     return init;
   else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type)
@@ -342,7 +344,11 @@ build_target_expr_with_type (tree init, tree type)
 tree
 force_target_expr (tree type, tree init)
 {
-  tree slot = build_local_temp (type);
+  tree slot;
+
+  my_friendly_assert (!VOID_TYPE_P (type), 20040130);
+
+  slot = build_local_temp (type);
   return build_target_expr (slot, init);
 }