C preprocessor bug

Jonathan Wakely jwakely@redhat.com
Mon Jul 22 09:44:32 GMT 2024


On 22/07/24 12:24 +0300, Ovidiu Panait wrote:
>Hi,
>
>When processing large header files, the C preprocessor reports error 
>on the wrong line.

This mailing list is for automated emails fom our bug tracker, not for
reporting bugs. Emails sent directly to this list will not get tracked
as bugs, and will generally be ignored.

To report a bug please follow the instructions at
https://gcc.gnu.org/bugs/ - thanks.


>This is 100% reproducible on my side with gcc mainline.
>
>Reproducer:
>
> # Build
>mkdir build; cd build
>../configure --host=x86_64-pc-linux-gnu --target=x86_64-wrs-linux 
>--enable-languages=c --disable-multilib --disable-libstdcxx-pch 
>--disable-libsanitizer --disable-libssp --disable-libquadmath 
>--disable-libquadmath-support --disable-libgomp --disable-libvtv 
>--disable-bootstrap
>make all-host -j$(nproc)
>mkdir install; make install-host DESTDIR=$(realpath ./install) -j$(nproc)
>
>
> # Generate testcase
>mkdir testcase; cd testcase
>cat > main.c <<EOF
>extern int main_begins;
>extern int main_begins;
>extern int main_begins;
>#include "header1.h"
>EOF
>echo -n > header1.h
>for i in {1..327676}; do
>    echo "extern int header1_begins;" >> header1.h
>done
>cat >> header1.h <<EOF
>#include "header2.h"
>extern int header1 ends;
>EOF
>echo -n > header2.h
>
>
> # Test
>../install/usr/local/bin/x86_64-wrs-linux-gcc main.c
>In file included from main.c:4:
>header1.h:327677:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or 
>‘__attribute__’ before ‘ends’
>327677 | #include "header2.h"
>       |                    ^
>
>
>The line where the error is reported("327677") is bogus, the actual 
>error is on the next line("327678") in header1.h:
>
>$ cat -n header1.h | tail -n3
>327676    extern int header1_begins;
>327677    #include "header2.h"
>327678    extern int header1 ends;
>
>
>Ovidiu



More information about the Gcc-bugs mailing list