Commit ed9984a0 by Cesar Philippidis Committed by Cesar Philippidis

[Fortran] Disable "Assignment to contiguous pointer from non-contiguous target" error

	gcc/fortran/
	* expr.c (gfc_check_pointer_assign): Demote "Assignment to
	contiguous pointer from non-contiguous target" to a warning.

	gcc/testsuite/
	* gfortran.dg/contiguous_4.f90: Adjust.
	* gfortran.dg/contiguous_4.f90: New test.

From-SVN: r264928
parent 49108562
2018-10-08 Cesar Philippidis <cesar@codesourcery.com>
* expr.c (gfc_check_pointer_assign): Demote "Assignment to
contiguous pointer from non-contiguous target" to a warning.
2018-10-08 Paul Thomas <pault@gcc.gnu.org> 2018-10-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86372 PR fortran/86372
......
...@@ -3957,13 +3957,13 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) ...@@ -3957,13 +3957,13 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
} }
} }
/* Error for assignments of contiguous pointers to targets which is not /* Warn for assignments of contiguous pointers to targets which is not
contiguous. Be lenient in the definition of what counts as contiguous. Be lenient in the definition of what counts as
contiguous. */ contiguous. */
if (lhs_attr.contiguous && !gfc_is_simply_contiguous (rvalue, false, true)) if (lhs_attr.contiguous && !gfc_is_simply_contiguous (rvalue, false, true))
gfc_error ("Assignment to contiguous pointer from non-contiguous " gfc_warning (OPT_Wextra, "Assignment to contiguous pointer from "
"target at %L", &rvalue->where); "non-contiguous target at %L", &rvalue->where);
/* Warn if it is the LHS pointer may lives longer than the RHS target. */ /* Warn if it is the LHS pointer may lives longer than the RHS target. */
if (warn_target_lifetime if (warn_target_lifetime
......
2018-10-08 Cesar Philippidis <cesar@codesourcery.com>
* gfortran.dg/contiguous_4.f90: Adjust.
* gfortran.dg/contiguous_4.f90: New test.
2018-10-08 Paul Thomas <pault@gcc.gnu.org> 2018-10-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86372 PR fortran/86372
......
...@@ -10,10 +10,10 @@ program cont_01_neg ...@@ -10,10 +10,10 @@ program cont_01_neg
x = (/ (real(i),i=1,45) /) x = (/ (real(i),i=1,45) /)
x2 = reshape(x,shape(x2)) x2 = reshape(x,shape(x2))
r => x(::3) ! { dg-error "Assignment to contiguous pointer" } r => x(::3)
r2 => x2(2:,:) ! { dg-error "Assignment to contiguous pointer" } r2 => x2(2:,:)
r2 => x2(:,2:3) r2 => x2(:,2:3)
r => x2(2:3,1) r => x2(2:3,1)
r => x(::1) r => x(::1)
r => x(::n) ! { dg-error "Assignment to contiguous pointer" } r => x(::n)
end program end program
! { dg-do compile }
! { dg-additional-options "-Wextra" }
!
! Ensure that contiguous pointers pointing to noncontiguous pointers
! to array results in a warning with -Wextra.
program cont_01_neg
implicit none
real, pointer, contiguous :: r(:)
real, pointer, contiguous :: r2(:,:)
real, target :: x(45)
real, target :: x2(5,9)
integer :: i
integer :: n=1
x = (/ (real(i),i=1,45) /)
x2 = reshape(x,shape(x2))
r => x(::3) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
r2 => x2(2:,:) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
r2 => x2(:,2:3)
r => x2(2:3,1)
r => x(::1)
r => x(::n) ! { dg-warning "ssignment to contiguous pointer from non-contiguous target" }
end program
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment