diff options
author | Bernhard Reutner-Fischer <aldot@gcc.gnu.org> | 2021-10-31 17:44:45 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <aldot@gcc.gnu.org> | 2021-11-05 22:09:48 +0100 |
commit | 1727bb533ede295a3ef2dd494225d27b6d1746aa (patch) | |
tree | 08756267680b9488af9104576c2d3c327adc8a34 /gcc/fortran/resolve.c | |
parent | c64ca0e7bbe193b95f50b0d3daf9ff7b710d6c6b (diff) | |
download | gcc-1727bb533ede295a3ef2dd494225d27b6d1746aa.zip gcc-1727bb533ede295a3ef2dd494225d27b6d1746aa.tar.gz gcc-1727bb533ede295a3ef2dd494225d27b6d1746aa.tar.bz2 |
Fortran: Missing error with IMPLICIT none (external) [PR100972]
gcc/fortran/ChangeLog:
PR fortran/100972
* decl.c (gfc_match_implicit_none): Fix typo in warning.
* resolve.c (resolve_unknown_f): Reject external procedures
without explicit EXTERNAL attribute whe IMPLICIT none (external)
is in effect.
gcc/testsuite/ChangeLog:
PR fortran/100972
* gfortran.dg/implicit_14.f90: Adjust error.
* gfortran.dg/external_implicit_none_3.f08: New test.
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 21126cb..1f4abd0 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2974,6 +2974,19 @@ resolve_unknown_f (gfc_expr *expr) return false; } + /* IMPLICIT NONE (external) procedures require an explicit EXTERNAL attr. */ + /* Intrinsics were handled above, only non-intrinsics left here. */ + if (sym->attr.flavor == FL_PROCEDURE + && sym->attr.implicit_type + && sym->ns + && sym->ns->has_implicit_none_export) + { + gfc_error ("Missing explicit declaration with EXTERNAL attribute " + "for symbol %qs at %L", sym->name, &sym->declared_at); + sym->error = 1; + return false; + } + /* The reference is to an external name. */ sym->attr.proc = PROC_EXTERNAL; |