This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, PR 40413] Fix bad offset use in load_assign_lhs_subreplacements
- From: Richard Guenther <rguenther at suse dot de>
- To: Martin Jambor <mjambor at suse dot cz>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 16 Jun 2009 11:55:22 +0200 (CEST)
- Subject: Re: [PATCH, PR 40413] Fix bad offset use in load_assign_lhs_subreplacements
- References: <20090616095146.GB27669@virgil.suse.cz>
On Tue, 16 Jun 2009, Martin Jambor wrote:
> Hi,
>
> this patch fixes PR 40413. The problem is that we pass an incorrect
> offset to build_ref_for_offset which then cannot find the right thing
> in the RHS expression.
>
> I also took this opportunity to fix a typo in a comment.
>
> Bootstrapped and tested on x86_64-linux.
>
> OK for trunk?
Ok.
Thanks,
Richard.
> Thanks,
>
> Martin
>
>
> 2009-06-15 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.
>
> Index: mine/gcc/tree-sra.c
> ===================================================================
> --- mine.orig/gcc/tree-sra.c
> +++ mine/gcc/tree-sra.c
> @@ -1544,7 +1544,7 @@ propagate_subacesses_accross_link (struc
> 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
> 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);
> }
>
> Index: mine/gcc/testsuite/gfortran.fortran-torture/compile/pr40413.f90
> ===================================================================
> --- /dev/null
> +++ mine/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
>
>
--
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex