------- Comment #4 from dfranke at gcc dot gnu dot org 2007-05-18 12:46 ------- F95, section 12.3.2.3, INTRINSIC statement: R1209 intrinsic-stmt is INTRINSIC [ :: ] intrinsic-procedure-name-list Constraint: Each intrinsic-procedure-name shall be the name of an intrinsic procedure.
This doesn't mention any types at all. In addition, only SUN warns about a superfluous type here: $> ifort -warn all pr20373.f90 # no message $> sunf95 -w3 pr20373.f90 integer, intrinsic :: dsqrt ^ "pr20373.f90", Line = 1, Column = 23: CAUTION: The type statement for generic intrinsic function DSQRT is ignored. Following this, following patch emits a warning if std=gnu and an error if std=f95|f2203 (not regtested). The wording of the msg could be improved ... Index: resolve.c =================================================================== --- resolve.c (revision 124790) +++ resolve.c (working copy) @@ -6400,6 +6400,12 @@ && !gfc_intrinsic_name(sym->name, 1)) gfc_error("Intrinsic at %L does not exist", &sym->declared_at); + /* Due to F95, 12.3.2.3, INTRINSIC statements shall have no type. */ + if (sym->attr.intrinsic && sym->ts.type != BT_UNKNOWN) + gfc_notify_std(GFC_STD_LEGACY | GFC_STD_GNU, + "Intrinsic at %L shall not have a type specifier", + &sym->declared_at); + /* Resolve array specifier. Check as well some constraints on COMMON blocks. */ $> gfortran-svn -g -Wall -std=gnu pr20373.f90 pr20373.f90:1.27: integer, intrinsic :: dsqrt 1 Warning: Intrinsic at (1) shall not have a type specifier -- dfranke at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dfranke at gcc dot gnu dot | |org Keywords| |diagnostic, patch Known to fail| |4.2.1 4.3.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20373