[Bug fortran/60543] [4.8/4.9 Regression] Function with side effect removed by the optimizer.
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Mar 16 17:49:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60543
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
CC| |burnus at gcc dot gnu.org
Target Milestone|--- |4.8.3
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Confirmed.
The problem is that "function random" is regarded as (implicit) pure. However,
gfortran's subroutine random_number is properly declared as impure.
Reduced example:
module m
contains
REAL(8) FUNCTION random()
CALL RANDOM_NUMBER(random)
END FUNCTION random
end module m
$ zgrep -i pure m.mod
0 0 FUNCTION IMPLICIT_PURE) () (REAL 8 0 0 0 REAL ()) 0 0 () () 3 () ()
Draft patch:
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -4407 +4407 @@ gfc_intrinsic_sub_interface (gfc_code *c, int error_flag)
- if (gfc_pure (NULL) && !isym->pure)
+ if (!isym->pure && gfc_pure (NULL))
@@ -4413,0 +4414,3 @@ gfc_intrinsic_sub_interface (gfc_code *c, int error_flag)
+ if (!isym->pure && gfc_implicit_pure (NULL))
+ gfc_current_ns->proc_name->attr.implicit_pure = 0;
+
More information about the Gcc-bugs
mailing list