Patch: FYI: fix PR libcpp/35322
Tom Tromey
tromey@redhat.com
Thu Mar 13 21:29:00 GMT 2008
I'm checking this in on the trunk.
This fixes PR libcpp/35322, an ICE with _Pragma.
The bug is that we didn't set pfile->directive while handling the
_Pragma.
Bootstrapped and regtested on the gcc compile farm.
Tom
gcc/testsuite/ChangeLog:
2008-03-13 Tom Tromey <tromey@redhat.com>
PR libcpp/35322:
* gcc.dg/cpp/pr35322.c: New file.
libcpp/ChangeLog:
2008-03-13 Tom Tromey <tromey@redhat.com>
PR libcpp/35322:
* directives.c (destringize_and_run): Set pfile->directive.
Index: gcc/testsuite/gcc.dg/cpp/pr35322.c
===================================================================
--- gcc/testsuite/gcc.dg/cpp/pr35322.c (revision 0)
+++ gcc/testsuite/gcc.dg/cpp/pr35322.c (revision 0)
@@ -0,0 +1,4 @@
+/* Test case for PR 35322 -- _Pragma ICE. */
+
+/* { dg-do preprocess } */
+_Pragma("GCC dependency")
Index: libcpp/directives.c
===================================================================
--- libcpp/directives.c (revision 133170)
+++ libcpp/directives.c (working copy)
@@ -1507,6 +1507,7 @@
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 @@
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
More information about the Gcc-patches
mailing list