OSDN Git Service

* config/rs6000/rs6000.opt (mspe): Remove Var property.
[pf3gnuchains/gcc-fork.git] / gcc / tlink.c
index 8e10eeb..53c51dc 100644 (file)
@@ -1,7 +1,7 @@
 /* Scan linker error messages for missing template instantiations and provide
    them.
 
 /* Scan linker error messages for missing template instantiations and provide
    them.
 
-   Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+   Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008
    Free Software Foundation, Inc.
    Contributed by Jason Merrill (jason@cygnus.com).
 
    Free Software Foundation, Inc.
    Contributed by Jason Merrill (jason@cygnus.com).
 
@@ -9,7 +9,7 @@ This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -18,9 +18,8 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
 #include "system.h"
 
 #include "config.h"
 #include "system.h"
@@ -607,7 +606,7 @@ scan_linker_output (const char *fname)
 {
   FILE *stream = fopen (fname, "r");
   char *line;
 {
   FILE *stream = fopen (fname, "r");
   char *line;
-  int skip_next_line = 0;
+  int skip_next_in_line = 0;
 
   while ((line = tfgets (stream)) != NULL)
     {
 
   while ((line = tfgets (stream)) != NULL)
     {
@@ -616,8 +615,11 @@ scan_linker_output (const char *fname)
       int end;
       int ok = 0;
 
       int end;
       int ok = 0;
 
-      if (skip_next_line)
-       continue;
+      /* On darwin9, we might have to skip " in " lines as well.  */
+      if (skip_next_in_line
+         && strstr (p, " in "))
+         continue;
+      skip_next_in_line = 0;
 
       while (*p && ISSPACE ((unsigned char) *p))
        ++p;
 
       while (*p && ISSPACE ((unsigned char) *p))
        ++p;
@@ -655,21 +657,23 @@ scan_linker_output (const char *fname)
       if (! sym && ! end)
        /* Try a mangled name in quotes.  */
        {
       if (! sym && ! end)
        /* Try a mangled name in quotes.  */
        {
-         const char *oldq = q + 1;
+         char *oldq = q + 1;
          demangled *dem = 0;
          q = 0;
 
          demangled *dem = 0;
          q = 0;
 
-         /* On darwin9, we look for "foo" referenced from:\n.*\n  */
+         /* On darwin9, we look for "foo" referenced from:\n\(.* in .*\n\)*  */
          if (strcmp (oldq, "referenced from:") == 0)
            {
              /* We have to remember that we found a symbol to tweak.  */
              ok = 1;
 
          if (strcmp (oldq, "referenced from:") == 0)
            {
              /* We have to remember that we found a symbol to tweak.  */
              ok = 1;
 
-             /* We actually want to start from the first word on the line.  */
+             /* We actually want to start from the first word on the
+                line.  */
              oldq = p;
 
              oldq = p;
 
-             /* Since the format is multiline, we have to skip the next line.  */
-             skip_next_line = 1;
+             /* Since the format is multiline, we have to skip
+                following lines with " in ".  */
+             skip_next_in_line = 1;
            }
 
          /* First try `GNU style'.  */
            }
 
          /* First try `GNU style'.  */
@@ -679,6 +683,9 @@ scan_linker_output (const char *fname)
          /* Then try "double quotes".  */
          else if (p = strchr (oldq, '"'), p)
            p++, q = strchr (p, '"');
          /* Then try "double quotes".  */
          else if (p = strchr (oldq, '"'), p)
            p++, q = strchr (p, '"');
+         /* Then try 'single quotes'.  */
+         else if (p = strchr (oldq, '\''), p)
+           p++, q = strchr (p, '\'');
          else {
            /* Then try entire line.  */
            q = strchr (oldq, 0);
          else {
            /* Then try entire line.  */
            q = strchr (oldq, 0);