http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46814

           Summary: Off by one in "In file included from" with
                    already-preprocessed source
           Product: gcc
           Version: 4.4.4
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: preprocessor
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: dus...@howett.net


linemap_print_containing_files is reporting invalid line numbers in source that
has already been run through the preprocessor. Tested on 4.2.1, 4.4.1 and
4.4.4, do not immediately have access to higher versions but will check.
This bug is also manifested via -save-temps (!).

Compilers tested:
gcc version 4.4.4 (Gentoo 4.4.4-r1 p1.0, pie-0.4.5), Target: x86_64-linux-gnu
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9), Target: x86_64-linux-gnu
gcc version 4.2.1 (Apple Inc. build 5664), Target: i686-apple-darwin10
gcc version 4.2.1 (Apple Inc. build 5664), Target: arm-apple-darwin10

It is best illustrated by the following:

x.cc
----
#include "badheader.h"
int main() { return 42; }

badheader.h
-----------
x;

---
gcc -c -o o/x.o x.cc
In file included from x.cc:1:
badheader.h:1: error: expected constructor, destructor, or type conversion
before ‘;’ token

gcc -E -o o/x.ii x.cc
gcc -c -o o/xii.o o/x.ii
In file included from x.cc:2:
badheader.h:1: error: expected constructor, destructor, or type conversion
before ‘;’ token

-v -save-temps:
$ gcc -v -save-temps -o x x.cc
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5664~38/src/configure --disable-checking
--enable-werror --prefix=/usr --mandir=/share/man
--enable-languages=c,objc,c++,obj-c++
--program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib
--build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10-
--host=x86_64-apple-darwin10 --target=i686-apple-darwin10
--with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)
 /usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1plus -E -quiet -v -imultilib
x86_64 -D__DYNAMIC__ x.cc -fPIC -mmacosx-version-min=10.6.5 -m64 -mtune=core2
-fpch-preprocess -D__private_extern__=extern -o x.ii
ignoring nonexistent directory
"/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../../i686-apple-darwin10/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.2.1
 /usr/include/c++/4.2.1/i686-apple-darwin10/x86_64
 /usr/include/c++/4.2.1/backward
 /usr/local/include
 /usr/lib/gcc/i686-apple-darwin10/4.2.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
 /usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1plus -fpreprocessed x.ii -fPIC
-quiet -dumpbase x.cc -mmacosx-version-min=10.6.5 -m64 -mtune=core2 -auxbase x
-version -D__private_extern__=extern -o x.s
GNU C++ version 4.2.1 (Apple Inc. build 5664) (i686-apple-darwin10)
    compiled by GNU C version 4.2.1 (Apple Inc. build 5664).
GGC heuristics: --param ggc-min-expand=150 --param ggc-min-heapsize=65536
Compiler executable checksum: b2d9fc2676bcbc4fe5c6f07f902dbb00
In file included from x.cc:2:
badheader.h:1: error: expected constructor, destructor, or type conversion
before ‘;’ token

The current preprocessed output for x.cc is as follows:
# 1 "x.cc"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "x.cc"
# 1 "badheader.h" 1
x;
# 2 "x.cc" 2
int main() { return 42; }

Reply via email to