[Bug preprocessor/23779] New: '-C' option produces wrong output
Christoph dot Spiel at partner dot bmw dot de
gcc-bugzilla@gcc.gnu.org
Thu Sep 8 11:48:00 GMT 2005
Hi!
We use gcc version 3.4.4 with cygwin running on
WinXP:
$ gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /gcc/gcc-3.4.4/gcc-3.4.4-1/configure --verbose
--prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib
--libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-languages=c,ada,c++,d,f77,java,objc --enable-nls
--without-included-gettext --enable-version-specific-runtime-libs --without-x
--enable-libgcj --disable-java-awt --with-system-zlib --enable-interpreter
--disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm
--disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization
--enable-libstdcxx-debug : (reconfigured)
Thread model: posix
gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
We want to preprocess our C-sources and keep the
comments. Therefore, we call the preprocessor
like this:
gcc -E -C foo.c
For a comment whose lines are terminated by
line-feeds, the preprocerssor works ok as the
example "foo-no-cr.c" shows.
$ cat -A foo-no-cr.c
/*12$
3456$
78*/$
$ gcc -E -C foo-no-cr.c
# 1 "foo-no-cr.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "foo-no-cr.c"
/*12
3456
78*/
However, if the lines are terminated by
carriage-return/line-feed pairs ("foo.c"),
superfluous newlines creep into the output.
$ cat -A foo.c
/*12^M$
3456^M$
78*/^M$
$ gcc -E -C foo.c
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "foo.c"
/*12
3456
78*/
Things get even more interesting, if we use line
continuation inside the comment
("foo-no-cr-backslash.c"). In the following
examples, we "continue" the first line of the
comment.
$ cat -A foo-no-cr-backslash.c
/*12\$
3456$
78*/$
$ gcc -E -C foo-no-cr-backslash.c
# 1 "foo-no-cr-backslash.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "foo-no-cr-backslash.c"
/*123456
6
78*/
And now the same with cr/lf-pairs
("foo-backslash.c"):
$ cat -A foo-backslash.c
/*12\^M$
3456^M$
78*/^M$
$ gcc -E -C foo-backslash.c
# 1 "foo-backslash.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "foo-backslash.c"
/*123456
56
78*/
Obviously, the preprocessor _duplicates_ the
last or last and next to last character of the
continuation line. This is a bug.
Version 3.3.1 of the compiler does not show this
bug. (It copies the comment literally, this is,
does not interpret the trailing-backslash as
line-continuation character.)
--
Summary: '-C' option produces wrong output
Product: gcc
Version: 3.4.4
Status: UNCONFIRMED
Severity: minor
Priority: P2
Component: preprocessor
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: Christoph dot Spiel at partner dot bmw dot de
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i686-pc-cygwin
GCC target triplet: i686-pc-cygwin
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23779
More information about the Gcc-bugs
mailing list