From 101e174d2c7f1d97a276cf951bcc6d55ecbcabdd Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Thu, 14 Feb 2008 21:41:40 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/c-pragma.c | 7 ++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c | 12 ++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3dfe7ad70f2..ab1a89bd8d27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-02-14 Danny Smith + + PR preprocessor/35061 + * c-pragma.c (handle_pragma_pop_macro): Check that + pushed_macro_table has been allocated. + 2008-02-14 Eric Botcazou PR middle-end/35136 diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index 28b44353b226..f7da67622ce4 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 7a4d5bb4d871..4c1c8b8705cd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-02-14 Danny Smith + + PR preprocessor/35061 + * gcc.dg/cpp/pragma_pop_macro-1.c: New test. + 2008-02-14 Paolo Carlini 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 000000000000..82beefc06182 --- /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 -- 2.47.2