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:
parent
0cc24ff082
commit
101e174d2c
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
12
gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
Normal file
12
gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
Normal 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
|
Loading…
Reference in New Issue
Block a user