re PR middle-end/33816 (gimplification before build_array_type re-set alias set of...
authorRichard Guenther <rguenther@suse.de>
Fri, 19 Oct 2007 15:36:05 +0000 (15:36 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 19 Oct 2007 15:36:05 +0000 (15:36 +0000)
2007-10-19  Richard Guenther  <rguenther@suse.de>

PR middle-end/33816
PR middle-end/32921
* stor-layout.c (layout_type): Assert that aggregates do not
have their alias sets set.
* alias.c (get_alias_set): Return alias set zero for incomplete
types, return the alias set of the element for incomplete array
types, but do not remember these.

* gfortran.dg/pr32921.f: New testcase.

From-SVN: r129491

gcc/ChangeLog
gcc/alias.c
gcc/stor-layout.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr32921.f [new file with mode: 0644]

index 14f14ccf71105cd6747d48b826ad0072e797857f..f55390257bfc70b61de6eb397dd7ddb2674dfb5b 100644 (file)
@@ -1,3 +1,13 @@
+2007-10-19  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/33816
+       PR middle-end/32921
+       * stor-layout.c (layout_type): Assert that aggregates do not
+       have their alias sets set.
+       * alias.c (get_alias_set): Return alias set zero for incomplete
+       types, return the alias set of the element for incomplete array
+       types, but do not remember these.
+
 2007-10-19  Richard Guenther  <rguenther@suse.de>
 
        Revert
index 1ba1ce366d85521e76f40d8bd59d4508e78f7e48..6bf67f3574ff332066c1cb1b505feb725c3e4680 100644 (file)
@@ -611,6 +611,18 @@ get_alias_set (tree t)
   if (TYPE_ALIAS_SET_KNOWN_P (t))
     return TYPE_ALIAS_SET (t);
 
+  /* We don't want to set TYPE_ALIAS_SET for incomplete types.  */
+  if (!COMPLETE_TYPE_P (t))
+    {
+      /* For arrays with unknown size the conservative answer is the
+        alias set of the element type.  */
+      if (TREE_CODE (t) == ARRAY_TYPE)
+       return get_alias_set (TREE_TYPE (t));
+
+      /* But return zero as a conservative answer for incomplete types.  */
+      return 0;
+    }
+
   /* See if the language has special handling for this type.  */
   set = lang_hooks.get_alias_set (t);
   if (set != -1)
index 226091709a241b79b2b948803a601d8fdeb7826b..23e0cf5549e146c1539859e47340f40521c20f68 100644 (file)
@@ -1886,13 +1886,10 @@ layout_type (tree type)
       && TREE_CODE (type) != QUAL_UNION_TYPE)
     finalize_type_size (type);
 
-  /* If an alias set has been set for this aggregate when it was incomplete,
-     force it into alias set 0.
-     This is too conservative, but we cannot call record_component_aliases
-     here because some frontends still change the aggregates after
-     layout_type.  */
-  if (AGGREGATE_TYPE_P (type) && TYPE_ALIAS_SET_KNOWN_P (type))
-    TYPE_ALIAS_SET (type) = 0;
+  /* We should never see alias sets on incomplete aggregates.  And we
+     should not call layout_type on not incomplete aggregates.  */
+  if (AGGREGATE_TYPE_P (type))
+    gcc_assert (!TYPE_ALIAS_SET_KNOWN_P (type));
 }
 \f
 /* Create and return a type for signed integers of PRECISION bits.  */
index f38e39029929c74165c0ca21cdbe09c234c7bf93..0c8d4cadd9f79ae1edd1a616b40a331e0f24f0f1 100644 (file)
@@ -1,3 +1,9 @@
+2007-10-19  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/33816
+       PR middle-end/32921
+       * gfortran.dg/pr32921.f: New testcase.
+
 2007-10-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/33544
diff --git a/gcc/testsuite/gfortran.dg/pr32921.f b/gcc/testsuite/gfortran.dg/pr32921.f
new file mode 100644 (file)
index 0000000..d110301
--- /dev/null
@@ -0,0 +1,49 @@
+! { dg-do compile }
+! { dg-options "-O2 -fdump-tree-lim" }
+! gfortran -c -m32 -O2 -S junk.f
+!
+      MODULE LES3D_DATA
+
+      IMPLICIT REAL*8 (A-H,O-Z)
+
+      PARAMETER ( NSPECI = 1, ND = 7 + NSPECI )
+
+      INTEGER IMAX
+
+      DOUBLE PRECISION,ALLOCATABLE,DIMENSION(:,:,:) ::
+     >         UAV,QAV
+
+
+      END MODULE LES3D_DATA
+!---------------------------------------------------------------------
+!------------------------------------------------------------------------
+      SUBROUTINE FLUXI()
+
+      USE LES3D_DATA
+      IMPLICIT REAL*8(A-H,O-Z)
+
+      ALLOCATABLE QS(:)
+
+      ALLOCATE( QS(0:IMAX))
+      QS=0D0
+
+      RETURN
+      END
+!------------------------------------------------------------------------
+!------------------------------------------------------------------------
+      SUBROUTINE EXTRAPI()
+
+      USE LES3D_DATA
+      IMPLICIT REAL*8(A-H,O-Z)
+
+      I1 = 0
+      I2 = IMAX - 1
+
+            DO I = I1, I2
+               UAV(I,1,2) = QAV(I,1,2)
+            END DO
+
+      RETURN
+      END
+! { dg-final { scan-tree-dump-times "stride" 6 "lim" } }
+! { dg-final { cleanup-tree-dump "lim" } }