X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftlink.c;h=53c51dc2ed4700c1c0d670d03c1bc4c4fe523a64;hb=ff84f6db4f5156191531c8d5226bd0ccfc12cf2a;hp=8e10eebbbaae7556d5405aec1adcaf2116c99a28;hpb=f1148292f050c38acb714a13d98e2a774e5a0145;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tlink.c b/gcc/tlink.c index 8e10eebbbaa..53c51dc2ed4 100644 --- a/gcc/tlink.c +++ b/gcc/tlink.c @@ -1,7 +1,7 @@ /* 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). @@ -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 -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 @@ -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 -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 +. */ #include "config.h" #include "system.h" @@ -607,7 +606,7 @@ scan_linker_output (const char *fname) { FILE *stream = fopen (fname, "r"); char *line; - int skip_next_line = 0; + int skip_next_in_line = 0; while ((line = tfgets (stream)) != NULL) { @@ -616,8 +615,11 @@ scan_linker_output (const char *fname) 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; @@ -655,21 +657,23 @@ scan_linker_output (const char *fname) if (! sym && ! end) /* Try a mangled name in quotes. */ { - const char *oldq = q + 1; + char *oldq = q + 1; 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; - /* 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; - /* 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'. */ @@ -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 'single quotes'. */ + else if (p = strchr (oldq, '\''), p) + p++, q = strchr (p, '\''); else { /* Then try entire line. */ q = strchr (oldq, 0);