diff options
author | Martin Jambor <mjambor@suse.cz> | 2009-06-16 12:11:55 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2009-06-16 12:11:55 +0200 |
commit | 2b26b801df0c37d2982a8c3667aea8b74d42c5c6 (patch) | |
tree | d54641652a829e612920b1d412fd459da7c421fb /gcc | |
parent | 8ad15a0a8d0666e21f4217d8ba004b33bcaf383d (diff) | |
download | gcc-2b26b801df0c37d2982a8c3667aea8b74d42c5c6.zip gcc-2b26b801df0c37d2982a8c3667aea8b74d42c5c6.tar.gz gcc-2b26b801df0c37d2982a8c3667aea8b74d42c5c6.tar.bz2 |
re PR tree-optimization/40413 (Internal error in connection with optimization and allocatable objects)
2009-06-16 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/40413
* tree-sra.c (load_assign_lhs_subreplacements): Pass offset to
build_ref_for_offset.
(propagate_subacesses_accross_link): Fix a typo in a comment.
* testsuite/gfortran.fortran-torture/compile/pr40413.f90: New file.
From-SVN: r148520
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f90 | 46 | ||||
-rw-r--r-- | gcc/tree-sra.c | 5 |
4 files changed, 59 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 716f1b3..36aa10b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-06-16 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/40413 + * tree-sra.c (load_assign_lhs_subreplacements): Pass offset to + build_ref_for_offset. + (propagate_subacesses_accross_link): Fix a typo in a comment. + 2009-06-16 Ira Rosen <irar@il.ibm.com> * tree-parloops.c (loop_parallel_p): Call vect_is_simple_reduction diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3a7612..d882c6c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-06-16 Martin Jambor <mjambor@suse.cz> + + * testsuite/gfortran.fortran-torture/compile/pr40413.f90: New file. + 2009-06-16 Janus Weil <janus@gcc.gnu.org> PR fortran/36947 diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f90 new file mode 100644 index 0000000..d8fa73d --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f90 @@ -0,0 +1,46 @@ +module state_matrices + + implicit none + private + + public :: state_matrix_copy + public :: state_matrix_t + public :: matrix_element_t + + type :: matrix_element_t + private + integer, dimension(:), allocatable :: f + end type matrix_element_t + + type :: state_matrix_t + private + type(matrix_element_t), dimension(:), allocatable :: me + end type state_matrix_t + + type :: polarization_t + logical :: polarized = .false. + integer :: spin_type = 0 + integer :: multiplicity = 0 + type(state_matrix_t) :: state + end type polarization_t + +contains + + function polarization_copy (pol_in) result (pol) + type(polarization_t) :: pol + type(polarization_t), intent(in) :: pol_in + !!! type(state_matrix_t) :: state_dummy + pol%polarized = pol_in%polarized + pol%spin_type = pol_in%spin_type + pol%multiplicity = pol_in%multiplicity + !!! state_dummy = state_matrix_copy (pol_in%state) + !!! pol%state = state_dummy + pol%state = state_matrix_copy (pol_in%state) + end function polarization_copy + + function state_matrix_copy (state_in) result (state) + type(state_matrix_t) :: state + type(state_matrix_t), intent(in), target :: state_in + end function state_matrix_copy + +end module state_matrices diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index e5f9b96..ddb015c 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1544,7 +1544,7 @@ propagate_subacesses_accross_link (struct access *lacc, struct access *racc) continue; } - /* If a (part of) a union field in on the RHS of an assignment, it can + /* If a (part of) a union field is on the RHS of an assignment, it can have sub-accesses which do not make sense on the LHS (PR 40351). Check that this is not the case. */ if (!build_ref_for_offset (NULL, TREE_TYPE (lacc->base), norm_offset, @@ -1949,8 +1949,7 @@ load_assign_lhs_subreplacements (struct access *lacc, struct access *top_racc, rhs = unshare_expr (top_racc->base); repl_found = build_ref_for_offset (&rhs, TREE_TYPE (top_racc->base), - lacc->offset - left_offset, - lacc->type, false); + offset, lacc->type, false); gcc_assert (repl_found); } |