From 264364930785b7f8a6cce1dcbe375f7010ce1e9b Mon Sep 17 00:00:00 2001
From: Paul Thomas <paulthomas2@wanadoo.fr>
Date: Fri, 31 Mar 2006 02:47:13 +0200
Subject: [PATCH] re PR fortran/21130 (38822 lines of Fortran 90 takes more
 than 10 minutes to compile on a dual 3GHz P4 Linux box with lots of RAM)

2006-03-30  Paul Thomas <paulthomas2@wanadoo.fr>
            Bud Davis  <bdavis9659@sbcglobal.net>

        PR 21130
        * module.c (load_needed): Traverse entire tree before returning.



Co-Authored-By: Bud Davis <bdavis9659@sbcglobal.net>

From-SVN: r112558
---
 gcc/fortran/ChangeLog |  6 ++++++
 gcc/fortran/module.c  | 13 +++++++------
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e1d1d30ff9f9..7d862357abff 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-30  Paul Thomas <paulthomas2@wanadoo.fr>
+            Bud Davis  <bdavis9659@sbcglobal.net>
+
+	PR 21130
+	* module.c (load_needed): Traverse entire tree before returning.
+
 2006-03-30  Roger Sayle  <roger@eyesopen.com>
 
 	PR middle-end/22375
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 0acc47480034..9949ccd4f2d8 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3061,16 +3061,17 @@ load_needed (pointer_info * p)
   gfc_namespace *ns;
   pointer_info *q;
   gfc_symbol *sym;
+  int rv;
 
+  rv = 0;
   if (p == NULL)
-    return 0;
-  if (load_needed (p->left))
-    return 1;
-  if (load_needed (p->right))
-    return 1;
+    return rv;
+
+  rv |= load_needed (p->left);
+  rv |= load_needed (p->right);
 
   if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED)
-    return 0;
+    return rv;
 
   p->u.rsym.state = USED;
 
-- 
GitLab