[patch] bug in cpp's #ident handling in gcc 3.4 [Was: ccache with
buildworld]
Maxim Sobolev
sobomax at portaone.com
Thu Aug 26 07:50:03 PDT 2004
Hi there,
I was looking into the problem with building world using ccache. It was
failing with the following error message:
/usr/src/lib/libc/rpc/key_call.c:33:10: extra tokens at end of #ident
directive
Further investigation revealed that pre-processor puts argument of
#ident directive into additional quotes (""). That is, after
pre-processor #ident "foo" becomes #ident ""foo"", so that compiler
considers that in this example ident itself is empty string and foo"" is
"extra tokens". Following script illustrates problem:
-bash-2.05b$ echo '#ident "foo bar"' > /tmp/foo.c
-bash-2.05b$ cc -E /tmp/foo.c
# 1 "/tmp/foo.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "/tmp/foo.c"
#ident ""foo bar""
-bash-2.05b$
This problem doesn't hit when compilation is made without ccache, since
in this case (for performance reasons probably) no intermediate
pre-processed output is emitted.
Attached please find small patch which fixes the problem for me. With
it, I was able to do buildworld using ccache.
It would be nice to get it committed before 5.3 is out.
Regards,
Maxim
-------------- next part --------------
--- src/contrib/gcc/c-ppoutput.c 2004/08/26 14:10:04 1.1
+++ src/contrib/gcc/c-ppoutput.c 2004/08/26 14:10:32
@@ -292,7 +292,7 @@
const cpp_string *str)
{
maybe_print_line (print.map, line);
- fprintf (print.outf, "#ident \"%s\"\n", str->text);
+ fprintf (print.outf, "#ident %s\n", str->text);
print.line++;
}
More information about the freebsd-current
mailing list