[Patch, Fortran] PRs 60283/60543: Fix two wrong-code bugs related for implicit pure
Tobias Burnus
burnus@net-b.de
Wed Mar 19 20:21:00 GMT 2014
Early *ping* - I think this wrong-code GCC 4.7/4.8/4.9 issue is pretty
severe.
Tobias Burnus wrote:
> This patch fixes two issues, where gfortran claims that a function is
> implicit pure, but it is not. That will cause a wrong-code
> optimization in the middle end.
>
> First problem, cf. PR60543, is that implicit pure was not set to 0 for
> calls to impure intrinsic subroutines. (BTW: There are no impure
> intrinsic functions.) Example:
>
> module m
> contains
> REAL(8) FUNCTION random()
> CALL RANDOM_NUMBER(random)
> END FUNCTION random
> end module m
>
>
> The second problem pops up if one adds a BLOCK ... END BLOCK around
> the random_number call after applying the patch of the PR, which just
> does: gfc_current_ns->proc_name->attr.implicit_pure = 0.
>
> The problem is that one sets only the implicit_pure of the block to 0
> and not of the function. That's the reason that the patch became much
> longer and that I added gfc_unset_implicit_pure as new function.
>
> Thus, the suspicion I had when reviewing the OpenACC patches turned
> out to be founded. Cf. PR60283.
>
> Build and regtested on x86-64-gnu-linux.
> OK for the trunk and for the 4.7 and 4.8 branches?
>
> Note: I failed to create a test case.
>
> Tobias
More information about the Fortran
mailing list