This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PR 40413] Fix bad offset use in load_assign_lhs_subreplacements


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]