re PR preprocessor/35322 (ICE with incomplete macro)
authorTom Tromey <tromey@redhat.com>
Thu, 13 Mar 2008 21:10:07 +0000 (21:10 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 13 Mar 2008 21:10:07 +0000 (21:10 +0000)
gcc/testsuite
PR libcpp/35322:
* gcc.dg/cpp/pr35322.c: New file.
libcpp
PR libcpp/35322:
* directives.c (destringize_and_run): Set pfile->directive.

From-SVN: r133195

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/pr35322.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/directives.c

index fd8c6d55160cf00b65d7dd653102686369568439..862a43edcfb10e5ce03426ab10a4f10fe9593b10 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-13  Tom Tromey  <tromey@redhat.com>
+
+       PR libcpp/35322:
+       * gcc.dg/cpp/pr35322.c: New file.
+
 2008-03-13  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.dg/vect/vect-align-2.c: Remove dg-do run directive.
diff --git a/gcc/testsuite/gcc.dg/cpp/pr35322.c b/gcc/testsuite/gcc.dg/cpp/pr35322.c
new file mode 100644 (file)
index 0000000..916b4cc
--- /dev/null
@@ -0,0 +1,4 @@
+/* Test case for PR 35322 -- _Pragma ICE.  */
+
+/* { dg-do preprocess } */
+_Pragma("GCC dependency")
index a6be847c5461ed6e3a0b02e2340b226938f6113c..8e8dfe4626f8771f49d427fa5144ebe5f1215944 100644 (file)
@@ -1,3 +1,8 @@
+2008-03-13  Tom Tromey  <tromey@redhat.com>
+
+       PR libcpp/35322:
+       * directives.c (destringize_and_run): Set pfile->directive.
+
 2008-03-06  Markus Milleder  <markus.milleder@generali.at>
 
        PR preprocessor/35458
index c77e84bfec16aa7f60a67725fde0cff330acc8a9..249a2324ee7d5ba23f3e0d4f617f4a88380f6968 100644 (file)
@@ -1507,6 +1507,7 @@ destringize_and_run (cpp_reader *pfile, const cpp_string *in)
   tokenrun *saved_cur_run;
   cpp_token *toks;
   int count;
+  const struct directive *save_directive;
 
   dest = result = (char *) alloca (in->len - 1);
   src = in->text + 1 + (in->text[0] == 'L');
@@ -1547,8 +1548,11 @@ destringize_and_run (cpp_reader *pfile, const cpp_string *in)
 
   start_directive (pfile);
   _cpp_clean_line (pfile);
+  save_directive = pfile->directive;
+  pfile->directive = &dtable[T_PRAGMA];
   do_pragma (pfile);
   end_directive (pfile, 1);
+  pfile->directive = save_directive;
 
   /* We always insert at least one token, the directive result.  It'll
      either be a CPP_PADDING or a CPP_PRAGMA.  In the later case, we