re PR c/24101 (Segfault with preprocessed source)
authorUros Bizjak <uros@gcc.gnu.org>
Wed, 9 Nov 2005 06:30:03 +0000 (07:30 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 9 Nov 2005 06:30:03 +0000 (07:30 +0100)
libcpp/

PR c/24101
* init.c (read_original_filename): Temporarily set
state.in_directive before calling _cpp_lex_direct for
CPP_HASH tokens.

gcc/

PR c/24101
* toplev.c (process_options): Initialize debug_hooks early
in case lang_hooks.post_options ends up calling a debug_hook.

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: r106677

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/dg.exp
gcc/testsuite/gcc.dg/pr24101-1.i [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr24101-2.i [new file with mode: 0644]
gcc/toplev.c
libcpp/ChangeLog
libcpp/init.c

index 5e86d193a40be425afb5107ceb6080ab31bafb75..c9836318d76e7c15cf554c9824987561681a27b9 100644 (file)
@@ -1,3 +1,10 @@
+2005-11-09  Per Bothner  <per@bothner.com>
+           Uros Bizjak  <uros@kss-loka.si>
+       
+       PR c/24101
+       * toplev.c (process_options): Initialize debug_hooks early
+       in case lang_hooks.post_options ends up calling a debug_hook.
+
 2005-11-08  Jakub Jelinek  <jakub@redhat.com>
 
        * dwarf2out.c (multiple_reg_loc_descriptor): Don't assume
index 8058bb84e5c003103c4f9871e34f89e52baa0c8a..d0bd89e28e8c1c3db0c2db3c466e920fb2d0b152 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-09  Uros Bizjak  <uros@kss-loka.si>
+
+       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-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/19450
index 00b26d6e394e93f6ff1d98d768157cc38c7e591e..826bcf3f3a5e36e25ecf1194b752b346b10abbca 100644 (file)
@@ -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 (file)
index 0000000..45c1655
--- /dev/null
@@ -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 (file)
index 0000000..501382d
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-ansi" } */
+
+#
index eea9ab20ead66dfaab66c11de9095c1aa53f4575..b03e91dc99948bfd4278d113ebf372ad258f4292 100644 (file)
@@ -1493,6 +1493,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)
@@ -1652,7 +1656,6 @@ process_options (void)
     default_debug_hooks = &vmsdbg_debug_hooks;
 #endif
 
-  debug_hooks = &do_nothing_debug_hooks;
   if (write_symbols == NO_DEBUG)
     ;
 #if defined(DBX_DEBUGGING_INFO)
index 3b14dabf134357cd103a4b338c20e494965f6930..747e45adc72ee538154d042786ef4638af1649ba 100644 (file)
@@ -1,3 +1,11 @@
+2005-11-09  Per Bothner  <per@bothner.com>
+           Uros Bizjak  <uros@kss-loka.si>
+       
+       PR c/24101
+       * init.c (read_original_filename): Temporarily set
+       state.in_directive before calling _cpp_lex_direct for
+       CPP_HASH tokens.
+
 2005-11-03  James E Wilson  <wilson@specifix.com>
 
        PR preprocessor/24202
index 3074f96b5c8b9905db5232c0c9e8a43657e6cfd3..bbf2705b46c4cca516609b979ec34fb1cfca4fd8 100644 (file)
@@ -497,8 +497,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)