[patch, fortran] fix for PR 60780, PR 40958

Russell Whitesides russelldub@gmail.com
Fri May 15 03:53:00 GMT 2015


Patch below prevents printing of duplicate statements in module files.
Without it module files grow exponentially in size with nested use of 
modules that contain equivalence statements.  Tested on x86-64-linux.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60780
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40958

2015-05-14

     PR fortran 60780
     * module.c (load_equiv) : add check for duplicate modules


Index: module.c
===================================================================
--- module.c	(revision 223202)
+++ module.c	(working copy)
@@ -4479,8 +4479,8 @@
  static void
  load_equiv (void)
  {
-  gfc_equiv *head, *tail, *end, *eq;
-  bool unused;
+  gfc_equiv *head, *tail, *end, *eq, *equiv;
+  bool unused, duplicate;

    mio_lparen ();
    in_load_equiv = true;
@@ -4523,8 +4523,20 @@
  	  }
        }

-    if (unused)
+    /* Check for duplicate equivalences being loaded from different 
modules */
+    duplicate = false;
+    for (equiv = gfc_current_ns->equiv; equiv; equiv = equiv->next)
        {
+        if (equiv->module && head->module
+              && strcmp (equiv->module, head->module) == 0)
+          {
+            duplicate = true;
+            break;
+          }
+      }
+
+    if (unused || duplicate)
+      {
  	for (eq = head; eq; eq = head)
  	  {
  	    head = eq->eq;



More information about the Fortran mailing list