Commit a595913e by Paul Thomas

re PR fortran/32881 (PURE attribute escapes from contained procedure)

2007-08-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/32881
	* expr.c (gfc_check_pointer_assign): If the rhs is the
	initialization expression for the rhs, there is no error.

2007-08-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/32881
	* gfortran.dg/pure_initializer_1.f90: New test.

From-SVN: r127611
parent 58fbb917
2007-08-18 Paul Thomas <pault@gcc.gnu.org> 2007-08-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32881
* expr.c (gfc_check_pointer_assign): If the rhs is the
initialization expression for the rhs, there is no error.
2007-08-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32875 PR fortran/32875
* trans-array.c (get_array_ctor_strlen): Set the character * trans-array.c (get_array_ctor_strlen): Set the character
length of a zero length array to zero. length of a zero length array to zero.
......
...@@ -2749,7 +2749,8 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) ...@@ -2749,7 +2749,8 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
is_pure = gfc_pure (NULL); is_pure = gfc_pure (NULL);
if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym)) if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym)
&& lvalue->symtree->n.sym->value != rvalue)
{ {
gfc_error ("Bad pointer object in PURE procedure at %L", &lvalue->where); gfc_error ("Bad pointer object in PURE procedure at %L", &lvalue->where);
return FAILURE; return FAILURE;
......
2007-08-18 Paul Thomas <pault@gcc.gnu.org> 2007-08-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32881
* gfortran.dg/pure_initializer_1.f90: New test.
2007-08-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32875 PR fortran/32875
* gfortran.dg/array_constructor_18.f90: New test. * gfortran.dg/array_constructor_18.f90: New test.
! { dg-do compile }
! Tests the fix for PR32881, in which the initialization
! of 'p' generated an error because the pureness of 'bar'
! escaped.
!
! Contributed by Janne Blomqvist <jb@gcc.gnu.org>
!
subroutine foo ()
integer, pointer :: p => NULL()
contains
pure function bar (a)
integer, intent(in) :: a
integer :: bar
bar = a
end function bar
end subroutine foo
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