Test global identifiers against what is specified interfaces.
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 5 Jul 2020 18:11:35 +0000 (20:11 +0200)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 5 Jul 2020 18:13:41 +0000 (20:13 +0200)
commitcc9a9229285a26ac12bc8de53237ce9c4d42f867
tree3cf1f57ca03637bc33a220fd8d032db66beaafad
parent706e6f613d23b708f44e7874b1f64ddbe155faf1
Test global identifiers against what is specified interfaces.

Apart from calling gfc_compare_interfaces to check interfaces against
global identifiers, this also sets and check a few sym->error flags
to avoid duplicate error messages.  I thought about issuing errors
on mismatched interfaces, but when the procedure is not invoked,
a warning should be enough to alert the user.

gcc/fortran/ChangeLog:

PR fortran/27318
* frontend-passes.c (check_against_globals): New function.
(gfc_check_externals): Split; also invoke check_against_globals
via gfc_traverse_ns.
(gfc_check_externals0): Recursive part formerly in
gfc_check_externals.
* resolve.c (resolve_global_procedure): Set sym->error on
interface mismatch.
* symbol.c (ambiguous_symbol): Check for, and set sym->error.

gcc/testsuite/ChangeLog:

PR fortran/27318
* gfortran.dg/error_recovery_1.f90: Adjust test case.
* gfortran.dg/use_15.f90: Likewise.
* gfortran.dg/interface_47.f90: New test.
gcc/fortran/frontend-passes.c
gcc/fortran/resolve.c
gcc/fortran/symbol.c
gcc/testsuite/gfortran.dg/error_recovery_1.f90
gcc/testsuite/gfortran.dg/interface_47.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/use_15.f90