Commit 8c810281 by Harald Anlauf

PR fortran/95503 - Fix ICE in gfc_is_simply_contiguous, at fortran/expr.c:5844

The check for assigning a pointer that cannot be determined to be simply
contiguous at compile time to a contiguous pointer does not need to be
invoked if the lhs of the assignment is known to have conflicting attributes.

2020-06-11  Harald Anlauf  <anlauf@gmx.de>

gcc/fortran/
	PR fortran/95503
	* expr.c (gfc_check_pointer_assign): Skip contiguity check of rhs
	of pointer assignment if lhs cannot be simply contiguous.

gcc/testsuite/
	PR fortran/95503
	* gfortran.dg/pr95503.f90: New test.

(cherry picked from commit 87af4f40453a9c84363bde5d9a58466de7fbee2e)
parent 0c39742d
...@@ -4346,7 +4346,9 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue, ...@@ -4346,7 +4346,9 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue,
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
&& lhs_attr.dimension > 0
&& !gfc_is_simply_contiguous (rvalue, false, true))
gfc_warning (OPT_Wextra, "Assignment to contiguous pointer from " gfc_warning (OPT_Wextra, "Assignment to contiguous pointer from "
"non-contiguous target at %L", &rvalue->where); "non-contiguous target at %L", &rvalue->where);
......
! { dg-do compile }
! PR fortran/95503 - ICE in gfc_is_simply_contiguous
program p
complex, target :: a
real, pointer, contiguous :: b => a%re ! { dg-error "not an array pointer" }
end
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