OSDN Git Service

* expr.c (categorize_ctor_elements_1): Properly count sub-elements of
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Apr 2010 10:00:13 +0000 (10:00 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 00:56:06 +0000 (09:56 +0900)
non-constant aggregate elements.

* gimplify.c (gimplify_init_constructor): Do not pre-evaluate if this
is a real initialization.

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

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog

index 66b4543..0d4284c 100644 (file)
@@ -1,3 +1,11 @@
+2010-04-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * expr.c (categorize_ctor_elements_1): Properly count sub-elements of
+       non-constant aggregate elements.
+
+       * gimplify.c (gimplify_init_constructor): Do not pre-evaluate if this
+       is a real initialization.
+
 2010-04-12  Shujing Zhao  <pearly.zhao@oracle.com>
 
        PR c/36774
index bfe82dd..a9eed84 100644 (file)
@@ -3793,10 +3793,10 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
        if (notify_temp_creation)
          return GS_OK;
 
-       /* If there are nonzero elements, pre-evaluate to capture elements
-          overlapping with the lhs into temporaries.  We must do this before
-          clearing to fetch the values before they are zeroed-out.  */
-       if (num_nonzero_elements > 0)
+       /* If there are nonzero elements and if needed, pre-evaluate to capture
+          elements overlapping with the lhs into temporaries.  We must do this
+          before clearing to fetch the values before they are zeroed-out.  */
+       if (num_nonzero_elements > 0 && TREE_CODE (*expr_p) != INIT_EXPR)
          {
            preeval_data.lhs_base_decl = get_base_address (object);
            if (!DECL_P (preeval_data.lhs_base_decl))
index 547ea32..1af0673 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/aggr13.adb: New test.
+       * gnat.dg/aggr14.adb: Likewise.
+       * gnat.dg/aggr14_pkg.ad[sb]: New helper.
+
 2010-04-12  Richard Guenther  <rguenther@suse.de>
 
        PR c++/43611