OSDN Git Service

* tree.c (build_target_expr_with_type): If we already have a
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 May 2000 23:51:37 +0000 (23:51 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 May 2000 23:51:37 +0000 (23:51 +0000)
        TARGET_EXPR, just return it.

        * optimize.c (initialize_inlined_parameters): Don't generate an
        EXPR_STMT if we can just use DECL_INITIAL.
        * decl.c (emit_local_var): Only make the initialization a
        full-expression if stmts_are_full_exprs_p.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/optimize.c
gcc/cp/tree.c

index efbd8e5..9c9990f 100644 (file)
@@ -1,3 +1,13 @@
+2000-05-01  Jason Merrill  <jason@casey.cygnus.com>
+
+       * tree.c (build_target_expr_with_type): If we already have a
+       TARGET_EXPR, just return it.
+
+       * optimize.c (initialize_inlined_parameters): Don't generate an
+       EXPR_STMT if we can just use DECL_INITIAL.
+       * decl.c (emit_local_var): Only make the initialization a
+       full-expression if stmts_are_full_exprs_p.
+
 2000-05-01  Mark Mitchell  <mark@codesourcery.com>
 
        * cp-tree.h (same_type_ignoring_top_level_qualifiers_p): New
index d9385f5..3853df1 100644 (file)
@@ -7871,9 +7871,13 @@ emit_local_var (decl)
     }
 
   /* Actually do the initialization.  */
-  expand_start_target_temps ();
+  if (stmts_are_full_exprs_p)
+    expand_start_target_temps ();
+
   expand_decl_init (decl);
-  expand_end_target_temps ();
+
+  if (stmts_are_full_exprs_p)
+    expand_end_target_temps ();
 }
 
 /* Finish processing of a declaration;
index 691969d..1158f39 100644 (file)
@@ -429,21 +429,30 @@ initialize_inlined_parameters (id, args, fn)
       splay_tree_insert (id->decl_map, 
                         (splay_tree_key) p,
                         (splay_tree_value) var);
+
+      /* Declare this new variable.  */
+      init_stmt = build_min_nt (DECL_STMT, var);
+      TREE_CHAIN (init_stmt) = init_stmts;
+      init_stmts = init_stmt;
+
       /* Initialize this VAR_DECL from the equivalent argument.  If
         the argument is an object, created via a constructor or copy,
         this will not result in an extra copy: the TARGET_EXPR
         representing the argument will be bound to VAR, and the
         object will be constructed in VAR.  */
-      init_stmt = build_min_nt (EXPR_STMT,
-                               build (INIT_EXPR, TREE_TYPE (p),
-                                      var, value));
-      /* Declare this new variable.  Note that we do this *after* the
-        initialization because we are going to reverse all the
-        initialization statements below.  */
-      TREE_CHAIN (init_stmt) = build_min_nt (DECL_STMT, var);
-      /* Add this initialization to the list.  */
-      TREE_CHAIN (TREE_CHAIN (init_stmt)) = init_stmts;
-      init_stmts = init_stmt;
+      if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p)))
+       DECL_INITIAL (var) = value;
+      else
+       {
+         init_stmt = build_min_nt (EXPR_STMT,
+                                   build (INIT_EXPR, TREE_TYPE (p),
+                                          var, value));
+         /* Add this initialization to the list.  Note that we want the
+            declaration *after* the initialization because we are going
+            to reverse all the initialization statements below.  */
+         TREE_CHAIN (init_stmt) = init_stmts;
+         init_stmts = init_stmt;
+       }
     }
 
   /* The initialization statements have been built up in reverse
index fe175f0..47209b2 100644 (file)
@@ -294,6 +294,9 @@ build_target_expr_with_type (init, type)
   tree slot;
   tree rval;
 
+  if (TREE_CODE (init) == TARGET_EXPR)
+    return init;
+
   slot = build (VAR_DECL, type);
   DECL_ARTIFICIAL (slot) = 1;
   DECL_CONTEXT (slot) = current_function_decl;