OSDN Git Service

PR c++/13693
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Jan 2004 23:37:39 +0000 (23:37 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Jan 2004 23:37:39 +0000 (23:37 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77008 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 41bc855..825a6e5 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 1065855..6acab3a 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 bedbbe9..7d98128 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);
 }