Given --- main.h --- not_declared_yet(); --- main.c --- #include "main.h" --- Makefile --- all: gcc --version gcc -Wall -E -I. main.c > huhu.ii -gcc -Wall -I. huhu.ii gcc -Wall -I. main.c ---- make produces: ------------------- make gcc --version gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gcc -Wall -E -I. main.c > huhu.ii gcc -Wall -I. huhu.ii In file included from main.c:2: main.h:1: error: expected constructor, destructor, or type conversion before ‘;’ token make: [all] Error 1 (ignored) gcc -Wall -I. main.c In file included from main.c:1: main.h:1: warning: data definition has no type or storage class main.h:1: warning: type defaults to ‘int’ in declaration of ‘not_declared_yet’ ...(truncated) ------------------- That is 'In file included from main.c:2:' instead of main.cc:1: when the file is preprocessed first. ---- huhu.ii contains --- # 1 "main.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "main.c" # 1 "main.h" 1 not_declared_yet(); # 1 "main.c" 2 -------------------------
Patch http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00875.html
Subject: Bug 36674 Author: manu Date: Wed May 13 23:17:55 2009 New Revision: 147504 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=147504 Log: 2009-05-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org> PR cpp/36674 libcpp/ * directives (do_linemarker): Compensate for the increment in location that occurs when we reach the end of line. * files (_cpp_stack_include): Mention _cpp_find_file in the comment. testsuite/ * gcc.dg/cpp/pr36674.i: New. Added: trunk/gcc/testsuite/gcc.dg/cpp/pr36674.i Modified: trunk/gcc/testsuite/ChangeLog trunk/libcpp/ChangeLog trunk/libcpp/directives.c trunk/libcpp/files.c
FIXED in GCC 4.5
*** Bug 46814 has been marked as a duplicate of this bug. ***