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
This commit is contained in:
Martin Jambor 2009-06-16 12:11:55 +02:00 committed by Martin Jambor
parent 8ad15a0a8d
commit 2b26b801df
4 changed files with 59 additions and 3 deletions

View File

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

View File

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

View File

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

View File

@ -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);
}