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
This commit is contained in:
Danny Smith 2008-02-14 21:41:40 +00:00 committed by Danny Smith
parent 0cc24ff082
commit 101e174d2c
4 changed files with 27 additions and 3 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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