Hi all, attached is a simple patch that fixes a regression which was introduced by one of my recent commits (spotted by Dominique).
My first impulse to fix the spurious error was to check for the 'intrinsic' attribute, however it is actually not set (yet?) in resolve_fl_derived, so the next-best thing is to check for 'use_assoc'. That is probably even better, since it's more general. Obviously, if a type has the 'use_assoc' attribute, then it has been declared in another module, so there is no need to complain that it was not declared. The patch regtests cleanly on x86_64-linux-gnu. Ok for trunk? Cheers, Janus
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c386a649583..8dad9d35eaf 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2018-09-03 Janus Weil <ja...@gcc.gnu.org> + + PR fortran/87172 + * resolve.c (resolve_fl_derived): If a type has the 'use_assoc' + attribute, then it was declared in another module, so there should be + no error that it has not been declared. + 2018-08-31 Paul Thomas <pa...@gcc.gnu.org> PR fortran/86328 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index ded27624283..ea0ce800743 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -14245,7 +14245,7 @@ resolve_fl_derived (gfc_symbol *sym) &sym->declared_at)) return false; - if (sym->components == NULL && !sym->attr.zero_comp) + if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc) { gfc_error ("Derived type %qs at %L has not been declared", sym->name, &sym->declared_at); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b44c714d7d2..da267de64ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-09-03 Janus Weil <ja...@gcc.gnu.org> + + PR fortran/87172 + * gfortran.dg/iso_c_binding_only_2.f90: New test case. + 2018-09-03 Richard Biener <rguent...@suse.de> PR tree-optimization/87200 diff --git a/gcc/testsuite/gfortran.dg/iso_c_binding_only_2.f90 b/gcc/testsuite/gfortran.dg/iso_c_binding_only_2.f90 new file mode 100644 index 00000000000..03fafe3f5cb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/iso_c_binding_only_2.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! +! PR 87172: [9 Regression] Spurious "Derived type 'c_funptr' at (1) has not been declared" error after r263782 +! +! Contributed by Dominique d'Humieres <domi...@lps.ens.fr> + +module m1 + use iso_c_binding, only: c_funptr +end module + +module m2 + use m1 + use iso_c_binding +end module