From: Uros Bizjak Date: Wed, 9 Nov 2005 07:51:51 +0000 (+0100) Subject: re PR c/24101 (Segfault with preprocessed source) X-Git-Tag: releases/gcc-3.4.5~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d8d5a716f7d70a696897e337777e993452b2479;p=thirdparty%2Fgcc.git re PR c/24101 (Segfault with preprocessed source) gcc/ PR c/24101 * toplev.c (process_options): Initialize debug_hooks early in case lang_hooks.post_options ends up calling a debug_hook. * cppinit.c (read_original_filename): Temporarily set state.in_directive before calling _cpp_lex_direct for CPP_HASH tokens. gcc/testsuite/ PR c/24101 * gcc.dg/pr24101-1.i, gcc.dg/pr24101-2.i: New tests. * gcc.dg/dg.exp: Run main loop also for *.i files. From-SVN: r106679 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c8e7587fd2cb..9576fbd272fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-11-09 Per Bothner + Uros Bizjak + + PR c/24101 + * toplev.c (process_options): Initialize debug_hooks early + in case lang_hooks.post_options ends up calling a debug_hook. + * cppinit.c (read_original_filename): Temporarily set + state.in_directive before calling _cpp_lex_direct for + CPP_HASH tokens. + 2005-11-07 Steve Ellcey PR bootstrap/24688 diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 8da0857dc7d0..647fbbf5f52c 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -498,8 +498,10 @@ read_original_filename (cpp_reader *pfile) token = _cpp_lex_direct (pfile); if (token->type == CPP_HASH) { + pfile->state.in_directive = 1; token1 = _cpp_lex_direct (pfile); _cpp_backup_tokens (pfile, 1); + pfile->state.in_directive = 0; /* If it's a #line directive, handle it. */ if (token1->type == CPP_NUMBER) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28b939550825..54ca96de343b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-11-09 Uros Bizjak + + PR c/24101 + * gcc.dg/pr24101-1.i, gcc.dg/pr24101-2.i: New tests. + * gcc.dg/dg.exp: Run main loop also for *.i files. + 2005-11-02 Josh Conner * g++.dg/crash38.C: moved into proper directory... diff --git a/gcc/testsuite/gcc.dg/dg.exp b/gcc/testsuite/gcc.dg/dg.exp index 14cf79d7e142..083345244dbe 100644 --- a/gcc/testsuite/gcc.dg/dg.exp +++ b/gcc/testsuite/gcc.dg/dg.exp @@ -29,7 +29,7 @@ if ![info exists DEFAULT_CFLAGS] then { dg-init # Main loop. -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cSi\]]] \ "" $DEFAULT_CFLAGS # All done. diff --git a/gcc/testsuite/gcc.dg/pr24101-1.i b/gcc/testsuite/gcc.dg/pr24101-1.i new file mode 100644 index 000000000000..45c165539b61 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr24101-1.i @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-ansi" } */ + +# 1 "/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.0/include/stddef.h" 1 3 4 diff --git a/gcc/testsuite/gcc.dg/pr24101-2.i b/gcc/testsuite/gcc.dg/pr24101-2.i new file mode 100644 index 000000000000..501382da4b68 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr24101-2.i @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-ansi" } */ + +# diff --git a/gcc/toplev.c b/gcc/toplev.c index 3c9dbcb06606..4e10fd6c7303 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -4271,6 +4271,10 @@ general_init (const char *argv0) static void process_options (void) { + /* Just in case lang_hooks.post_options ends up calling a debug_hook. + This can happen with incorrect pre-processed input. */ + debug_hooks = &do_nothing_debug_hooks; + /* Allow the front end to perform consistency checks and do further initialization based on the command line options. This hook also sets the original filename if appropriate (e.g. foo.i -> foo.c) @@ -4400,7 +4404,7 @@ process_options (void) /* Now we know write_symbols, set up the debug hooks based on it. By default we do nothing for debug output. */ if (write_symbols == NO_DEBUG) - debug_hooks = &do_nothing_debug_hooks; + ; #if defined(DBX_DEBUGGING_INFO) else if (write_symbols == DBX_DEBUG) debug_hooks = &dbx_debug_hooks;