aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDanny Smith <dannysmith@users.sourceforge.net>2008-02-14 21:41:40 +0000
committerDanny Smith <dannysmith@gcc.gnu.org>2008-02-14 21:41:40 +0000
commit101e174d2c7f1d97a276cf951bcc6d55ecbcabdd (patch)
treecdaa87661a8e9905d3600ff02fe3ca6acec3909b /gcc
parent0cc24ff082435b48eca7ec991e18eb437d7094b7 (diff)
downloadgcc-101e174d2c7f1d97a276cf951bcc6d55ecbcabdd.zip
gcc-101e174d2c7f1d97a276cf951bcc6d55ecbcabdd.tar.gz
gcc-101e174d2c7f1d97a276cf951bcc6d55ecbcabdd.tar.bz2
re PR preprocessor/35061 (#pragma pop_macro causes ICE if no macro value on stack)
PR preprocessor/35061 gcc * c-pragma.c (handle_pragma_pop_macro): Check that pushed_macro_table has been allocated. testsuite * gcc.dg/cpp/pragma_pop_macro-1.c: New file From-SVN: r132322
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-pragma.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c12
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d3dfe7a..ab1a89b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-02-14 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR preprocessor/35061
+ * c-pragma.c (handle_pragma_pop_macro): Check that
+ pushed_macro_table has been allocated.
+
2008-02-14 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/35136
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index 28b4435..f7da676 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -341,7 +341,7 @@ handle_pragma_pop_macro (cpp_reader *reader)
enum cpp_ttype token;
struct def_pragma_macro dummy, *c;
const char *macroname;
- void **slot;
+ void **slot = NULL;
if (pragma_lex (&x) != CPP_OPEN_PAREN)
GCC_BAD ("missing %<(%> after %<#pragma pop_macro%> - ignored");
@@ -367,8 +367,9 @@ handle_pragma_pop_macro (cpp_reader *reader)
dummy.hash = htab_hash_string (macroname);
dummy.name = macroname;
- slot = htab_find_slot_with_hash (pushed_macro_table, &dummy,
- dummy.hash, NO_INSERT);
+ if (pushed_macro_table)
+ slot = htab_find_slot_with_hash (pushed_macro_table, &dummy,
+ dummy.hash, NO_INSERT);
if (slot == NULL)
return;
c = *slot;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7a4d5bb..4c1c8b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-14 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR preprocessor/35061
+ * gcc.dg/cpp/pragma_pop_macro-1.c: New test.
+
2008-02-14 Paolo Carlini <pcarlini@suse.de>
PR c++/28743
diff --git a/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c b/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
new file mode 100644
index 0000000..82beefc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
@@ -0,0 +1,12 @@
+/* PR preprocessor/35061 */
+/* Do nothing if there is nothing on the macro stack to pop. */
+
+/* { dg do-preprocess { target *-*-mingw* *-*-cygwin* } } */
+
+#define X 1
+/* # pragma push_macro("X") */
+# undef X
+# pragma pop_macro("X")
+#ifdef X
+#error X is defined
+#endif