Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Aug 2004 17:49:42 +0300
From:      Maxim Sobolev <sobomax@portaone.com>
To:        kan@FreeBSD.org
Cc:        iedowse@FreeBSD.org
Subject:   [patch] bug in cpp's #ident handling in gcc 3.4 [Was: ccache with buildworld]
Message-ID:  <412DF886.4030107@portaone.com>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------080704020600050803040405
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

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

--------------080704020600050803040405
Content-Type: text/plain;
 name="cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="cpp.diff"

--- 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++;
 }
 

--------------080704020600050803040405--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?412DF886.4030107>