http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54556

--- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-09-12 
21:00:32 UTC ---
Test case: Compile in two files with -O0/-O1/-O2/ give the expected i == 5 but
using -O3 hoists the "i = s(x)" out of the loop and thus gives i == 1.

Question: Why is IMPLICIT_PURE set. For a PURE function, one gets:
   Variable 'x' can not appear in a variable definition context

! ------ FILE  1 ----------
module m
  type t
    integer :: i = 0
  end type t
contains
  integer function s(x)
    type(t), pointer :: x
    x%i = x%i + 1
    s = x%i
  end function s
end module m

! ------- FILE 2 ----------
use m
type(t), pointer :: x
integer :: i, j, k
allocate(x)
x%i = 0
do k = 1, 5
  i = s(x)
end do
print *, i
if (i /= 5) call abort ()
end

Reply via email to