+2010-05-26 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/40011
+ * resolve.c (resolve_global_procedure): Resolve the gsymbol's
+ namespace before trying to reorder the gsymbols.
+
2010-05-25 Daniel Franke <franke.daniel@gmail.com>
PR fortran/30668
&& not_in_recursive (sym, gsym->ns)
&& not_entry_self_reference (sym, gsym->ns))
{
- /* Make sure that translation for the gsymbol occurs before
- the procedure currently being resolved. */
- ns = gsym->ns->resolved ? NULL : gfc_global_ns_list;
- for (; ns && ns != gsym->ns; ns = ns->sibling)
- {
- if (ns->sibling == gsym->ns)
- {
- ns->sibling = gsym->ns->sibling;
- gsym->ns->sibling = gfc_global_ns_list;
- gfc_global_ns_list = gsym->ns;
- break;
- }
- }
-
+ /* Resolve the gsymbol namespace if needed. */
if (!gsym->ns->resolved)
{
gfc_dt_list *old_dt_list;
gfc_derived_types = old_dt_list;
}
+ /* Make sure that translation for the gsymbol occurs before
+ the procedure currently being resolved. */
+ ns = gfc_global_ns_list;
+ for (; ns && ns != gsym->ns; ns = ns->sibling)
+ {
+ if (ns->sibling == gsym->ns)
+ {
+ ns->sibling = gsym->ns->sibling;
+ gsym->ns->sibling = gfc_global_ns_list;
+ gfc_global_ns_list = gsym->ns;
+ break;
+ }
+ }
+
if (gsym->ns->proc_name->attr.function
&& gsym->ns->proc_name->as
&& gsym->ns->proc_name->as->rank
--- /dev/null
+! { dg-do compile }
+! { dg-options "-fwhole-file" }
+! Test the fix for pr40011 comment #42, in which the subroutine
+! would just get lost with -fwhole-file.
+!
+! Contributed by Joost VandeVandole <jv244@cam.ac.uk>
+!
+SUBROUTINE c()
+ CALL a()
+END SUBROUTINE c
+
+SUBROUTINE a()
+END SUBROUTINE a
+
+MODULE M
+CONTAINS
+ SUBROUTINE b()
+ CALL c()
+ END SUBROUTINE
+END MODULE
+
+USE M
+CALL b()
+END
+! { dg-final { cleanup-modules "m" } }