aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2009-06-16 12:11:55 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2009-06-16 12:11:55 +0200
commit2b26b801df0c37d2982a8c3667aea8b74d42c5c6 (patch)
treed54641652a829e612920b1d412fd459da7c421fb /gcc
parent8ad15a0a8d0666e21f4217d8ba004b33bcaf383d (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f9046
-rw-r--r--gcc/tree-sra.c5
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);
}