re PR middle-end/33816 (gimplification before build_array_type re-set alias set of arrays to zero)

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
This commit is contained in:
Richard Guenther 2007-10-19 15:36:05 +00:00 committed by Richard Biener
parent 77aadb5728
commit 36784d0e87
5 changed files with 81 additions and 7 deletions

View 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

View 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)

View 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));
}
/* Create and return a type for signed integers of PRECISION bits. */

View 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

View File

@ -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" } }