PR ld/11006
authorAlan Modra <amodra@gmail.com>
Mon, 30 Nov 2009 00:27:45 +0000 (00:27 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 30 Nov 2009 00:27:45 +0000 (00:27 +0000)
* lexsup.c (parse_args): Allow nested --start-group, --end-group.

ld/ChangeLog
ld/lexsup.c

index 3a0aa49315d11674e3c4f7e7fce8db5c30dd40cb..8b4d06627f20dae8c48c289c0eb5f46e942ce352 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-30  Alan Modra  <amodra@bigpond.net.au>
+
+       PR ld/11006
+       * lexsup.c (parse_args): Allow nested --start-group, --end-group.
+
 2009-11-27  Tristan Gingold  <gingold@adacore.com>
 
        * pe-dll.c (pe_implied_import_dll): Return early if there is no
index 20aef7b8cee9aebc27053573b53f64bb9af04fef..b992fca37ab13cdb9ddf4be677304b5777035ad2 100644 (file)
@@ -1459,18 +1459,15 @@ parse_args (unsigned argc, char **argv)
          command_line.accept_unknown_input_arch = FALSE;
          break;
        case '(':
-         if (ingroup)
-           einfo (_("%P%F: may not nest groups (--help for usage)\n"));
-
          lang_enter_group ();
-         ingroup = 1;
+         ingroup++;
          break;
        case ')':
          if (! ingroup)
            einfo (_("%P%F: group ended before it began (--help for usage)\n"));
 
          lang_leave_group ();
-         ingroup = 0;
+         ingroup--;
          break;
 
        case OPTION_INIT:
@@ -1501,8 +1498,11 @@ parse_args (unsigned argc, char **argv)
        }
     }
 
-  if (ingroup)
-    lang_leave_group ();
+  while (ingroup)
+    {
+      lang_leave_group ();
+      ingroup--;
+    }
 
   if (default_dirlist != NULL)
     {