re PR target/43808 (-fipa-reference -fschedule-insns -fstrict-aliasing causes two...
authorJakub Jelinek <jakub@redhat.com>
Tue, 9 Nov 2010 19:31:45 +0000 (20:31 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 9 Nov 2010 19:31:45 +0000 (20:31 +0100)
PR target/43808
* cfgexpand.c (partition_stack_vars): Call
update_alias_info_with_stack_vars unconditionally.
(update_alias_info_with_stack_vars): Allow unused
unreferenced vars when not optimizing.

* gfortran.dg/pr43808.f90: New test.

From-SVN: r166509

gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr43808.f90 [new file with mode: 0644]

index dbf4ef6ab1da8a5998c968226fc5a25c4bee191d..d8b25500ba128f489f96ef62ad1bda5e070bea27 100644 (file)
@@ -1,3 +1,11 @@
+2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/43808
+       * cfgexpand.c (partition_stack_vars): Call
+       update_alias_info_with_stack_vars unconditionally.
+       (update_alias_info_with_stack_vars): Allow unused
+       unreferenced vars when not optimizing.
+
 2010-11-09  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR tree-optimization/46036
index c44649e857d3324abff46df5c9653f1f1dd89657..784639d9e65610ae4be7b5aa280d2de97ed47e67 100644 (file)
@@ -516,9 +516,11 @@ update_alias_info_with_stack_vars (void)
          unsigned int uid = DECL_PT_UID (decl);
          /* We should never end up partitioning SSA names (though they
             may end up on the stack).  Neither should we allocate stack
-            space to something that is unused and thus unreferenced.  */
+            space to something that is unused and thus unreferenced, except
+            for -O0 where we are preserving even unreferenced variables.  */
          gcc_assert (DECL_P (decl)
-                     && referenced_var_lookup (DECL_UID (decl)));
+                     && (!optimize
+                         || referenced_var_lookup (DECL_UID (decl))));
          bitmap_set_bit (part, uid);
          *((bitmap *) pointer_map_insert (decls_to_partitions,
                                           (void *)(size_t) uid)) = part;
@@ -684,8 +686,7 @@ partition_stack_vars (void)
        }
     }
 
-  if (optimize)
-    update_alias_info_with_stack_vars ();
+  update_alias_info_with_stack_vars ();
 }
 
 /* A debugging aid for expand_used_vars.  Dump the generated partitions.  */
index 5517521f6711594d4c7f3da2354a4ae5a8dfe74f..3e451d00c8b8e68392e217f4d0b214854b16314a 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/43808
+       * gfortran.dg/pr43808.f90: New test.
+
 2010-11-09  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR tree-optimization/46036
diff --git a/gcc/testsuite/gfortran.dg/pr43808.f90 b/gcc/testsuite/gfortran.dg/pr43808.f90
new file mode 100644 (file)
index 0000000..97de628
--- /dev/null
@@ -0,0 +1,18 @@
+! PR target/43808
+! { dg-do run }
+! { dg-options "-O0 -fipa-reference -fschedule-insns -fstrict-aliasing" }
+
+  type :: a
+    integer, allocatable :: i(:)
+  end type a
+  type :: b
+    type (a), allocatable :: j(:)
+  end type b
+  type(a) :: x(2)
+  type(b) :: y(2)
+  x(1) = a((/1,2,3,4/))
+  x(2) = a((/1,2,3,4/)+10)
+  y(1) = b((/x(1),x(2)/))
+  y(2) = b((/x(1),x(2)/))
+  if (y(1)%j(1)%i(1) .ne. 1) call abort
+end