+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
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");
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;
+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
--- /dev/null
+/* 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