aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2009-11-11 18:37:19 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2009-11-11 19:37:19 +0100
commit17e7cb855000baa6598005571d7dd49cfac5282a (patch)
treee54ead3691775dbb1e9d31588966d79cac024672 /gcc
parent110532c838d2302c88de13ad88f81ec975ed4b1e (diff)
downloadgcc-17e7cb855000baa6598005571d7dd49cfac5282a.zip
gcc-17e7cb855000baa6598005571d7dd49cfac5282a.tar.gz
gcc-17e7cb855000baa6598005571d7dd49cfac5282a.tar.bz2
ChangeLog for libcpp
2009-11-11 Kai Tietz <kai.tietz@onevision.com> * directives.c (do_pragma_push_macro): New pragma handler. (do_pragma_pop_macro): Likewise. (_cpp_init_internal_pragmas): Add push_macro and pop_macro handler to internal pragmas. (lex_macro_node_from_str): Removed. (cpp_push_definition): Replace lex_macro_node_from_str by _cpp_lex_identifier. (cpp_pop_definition): Likewise. * internal.h (_cpp_lex_identifier): New prototype. (def_pragma_macro): New structure. (cpp_reader): New member pushed_macros. * lex.c (_cpp_lex_identifier): New function. (lex_identifier_intern): New function. * init.c (cpp_create_reader): Initialize pushed_macros member. (cpp_destroy): Free elements in pushed_macros member. * pch.c (_cpp_save_pushed_macros): New function. (_cpp_restore_pushed_macros): Likewise. (_cpp_restore_pushed_macros): Use _cpp_save_pushed_macros. (cpp_read_state): Use _cpp_restore_pushed_macros. ChangeLog for gcc 2009-11-11 Kai Tietz <kai.tietz@onevision.com> * config/i386/cygming.h (HANDLE_PRAGMA_PUSH_POP_MACRO): Removed. * c-pragma.c (def_pragma_macro_value): Likewise. (def_pragma_macro): Likewise. (pushed_macro_table): Likewise. (HANDLE_PRAGMA_PUSH_POP_MACRO): Remove guarded code. * doc/tm.texi (HANDLE_PRAGMA_PUSH_POP_MACRO): Removed. ChangeLog for gcc/testsuite 2009-11-11 Kai Tietz <kai.tietz@onevision.com> * g++.dg/torture/pushpop_macro.C: New testcase. * gcc.c-torture/execute/pushpop_macro.c: New testcase. * gcc.dg/cpp/pragma-pop_macro-1.c: Allow test for all targets. From-SVN: r154098
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/c-pragma.c142
-rw-r--r--gcc/config/i386/cygming.h2
-rw-r--r--gcc/doc/tm.texi12
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/torture/pushpop_macro.C19
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pushpop_macro.c15
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/pch/pushpop-1.c11
-rw-r--r--gcc/testsuite/gcc.dg/pch/pushpop-1.hs5
10 files changed, 70 insertions, 158 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0de0981..87e6fb4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2009-11-11 Kai Tietz <kai.tietz@onevision.com>
+
+ * config/i386/cygming.h (HANDLE_PRAGMA_PUSH_POP_MACRO):
+ Removed.
+ * c-pragma.c (def_pragma_macro_value): Likewise.
+ (def_pragma_macro): Likewise.
+ (pushed_macro_table): Likewise.
+ (HANDLE_PRAGMA_PUSH_POP_MACRO): Remove guarded
+ code.
+ * doc/tm.texi (HANDLE_PRAGMA_PUSH_POP_MACRO):
+ Removed.
+
2009-11-11 Basile Starynkevitch <basile@starynkevitch.net>
* doc/plugins.texi (Registering custom attributes): section
renamed as (Registering custom attributes or pragmas).
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index f71399f..79b3d13 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -244,144 +244,6 @@ handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy))
}
#endif /* HANDLE_PRAGMA_PACK */
-struct GTY(()) def_pragma_macro_value {
- struct def_pragma_macro_value *prev;
- cpp_macro *value;
-};
-
-struct GTY(()) def_pragma_macro {
- hashval_t hash;
- const char *name;
- struct def_pragma_macro_value value;
-};
-
-static GTY((param_is (struct def_pragma_macro))) htab_t pushed_macro_table;
-
-#ifdef HANDLE_PRAGMA_PUSH_POP_MACRO
-/* Hash table control functions for pushed_macro_table. */
-static hashval_t
-dpm_hash (const void *p)
-{
- return ((const struct def_pragma_macro *)p)->hash;
-}
-
-static int
-dpm_eq (const void *pa, const void *pb)
-{
- const struct def_pragma_macro *const a = (const struct def_pragma_macro *) pa,
- *const b = (const struct def_pragma_macro *) pb;
- return a->hash == b->hash && strcmp (a->name, b->name) == 0;
-}
-
-/* #pragma push_macro("MACRO_NAME")
- #pragma pop_macro("MACRO_NAME") */
-
-static void
-handle_pragma_push_macro (cpp_reader *reader)
-{
- tree x, id = 0;
- enum cpp_ttype token;
- struct def_pragma_macro dummy, *c;
- const char *macroname;
- void **slot;
-
- if (pragma_lex (&x) != CPP_OPEN_PAREN)
- GCC_BAD ("missing %<(%> after %<#pragma push_macro%> - ignored");
-
- token = pragma_lex (&id);
-
- /* Silently ignore */
- if (token == CPP_CLOSE_PAREN)
- return;
- if (token != CPP_STRING)
- GCC_BAD ("invalid constant in %<#pragma push_macro%> - ignored");
-
- if (pragma_lex (&x) != CPP_CLOSE_PAREN)
- GCC_BAD ("missing %<)%> after %<#pragma push_macro%> - ignored");
-
- if (pragma_lex (&x) != CPP_EOF)
- warning (OPT_Wpragmas, "junk at end of %<#pragma push_macro%>");
-
- /* Check for empty string, and silently ignore. */
- if (TREE_STRING_LENGTH (id) < 1)
- return;
- macroname = TREE_STRING_POINTER (id);
-
- if (pushed_macro_table == NULL)
- pushed_macro_table = htab_create_ggc (15, dpm_hash, dpm_eq, 0);
-
- dummy.hash = htab_hash_string (macroname);
- dummy.name = macroname;
- slot = htab_find_slot_with_hash (pushed_macro_table, &dummy,
- dummy.hash, INSERT);
- c = (struct def_pragma_macro *) *slot;
- if (c == NULL)
- {
- *slot = c = GGC_NEW (struct def_pragma_macro);
- c->hash = dummy.hash;
- c->name = ggc_alloc_string (macroname, TREE_STRING_LENGTH (id) - 1);
- c->value.prev = NULL;
- }
- else
- {
- struct def_pragma_macro_value *v;
- v = GGC_NEW (struct def_pragma_macro_value);
- *v = c->value;
- c->value.prev = v;
- }
-
- c->value.value = cpp_push_definition (reader, macroname);
-}
-
-static void
-handle_pragma_pop_macro (cpp_reader *reader)
-{
- tree x, id = 0;
- enum cpp_ttype token;
- struct def_pragma_macro dummy, *c;
- const char *macroname;
- void **slot = NULL;
-
- if (pragma_lex (&x) != CPP_OPEN_PAREN)
- GCC_BAD ("missing %<(%> after %<#pragma pop_macro%> - ignored");
-
- token = pragma_lex (&id);
-
- /* Silently ignore */
- if (token == CPP_CLOSE_PAREN)
- return;
- if (token != CPP_STRING)
- GCC_BAD ("invalid constant in %<#pragma pop_macro%> - ignored");
-
- if (pragma_lex (&x) != CPP_CLOSE_PAREN)
- GCC_BAD ("missing %<)%> after %<#pragma pop_macro%> - ignored");
-
- if (pragma_lex (&x) != CPP_EOF)
- warning (OPT_Wpragmas, "junk at end of %<#pragma pop_macro%>");
-
- /* Check for empty string, and silently ignore. */
- if (TREE_STRING_LENGTH (id) < 1)
- return;
- macroname = TREE_STRING_POINTER (id);
-
- dummy.hash = htab_hash_string (macroname);
- dummy.name = macroname;
- if (pushed_macro_table)
- slot = htab_find_slot_with_hash (pushed_macro_table, &dummy,
- dummy.hash, NO_INSERT);
- if (slot == NULL)
- return;
- c = (struct def_pragma_macro *) *slot;
-
- cpp_pop_definition (reader, c->name, c->value.value);
-
- if (c->value.prev)
- c->value = *c->value.prev;
- else
- htab_clear_slot (pushed_macro_table, slot);
-}
-#endif /* HANDLE_PRAGMA_PUSH_POP_MACRO */
-
static GTY(()) tree pending_weaks;
#ifdef HANDLE_PRAGMA_WEAK
@@ -1422,10 +1284,6 @@ init_pragma (void)
c_register_pragma (0, "pack", handle_pragma_pack);
#endif
#endif
-#ifdef HANDLE_PRAGMA_PUSH_POP_MACRO
- c_register_pragma (0 ,"push_macro", handle_pragma_push_macro);
- c_register_pragma (0 ,"pop_macro", handle_pragma_pop_macro);
-#endif
#ifdef HANDLE_PRAGMA_WEAK
c_register_pragma (0, "weak", handle_pragma_weak);
#endif
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index cdab21c..ddec95a 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -127,8 +127,6 @@ along with GCC; see the file COPYING3. If not see
/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */
#define HANDLE_PRAGMA_PACK_PUSH_POP 1
-/* Enable push_macro & pop_macro */
-#define HANDLE_PRAGMA_PUSH_POP_MACRO 1
union tree_node;
#define TREE union tree_node *
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index c69ef0c..3950967 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -10476,18 +10476,6 @@ This must be a value that would also be valid to use with
@samp{#pragma pack()} (that is, a small power of two).
@end defmac
-@findex #pragma
-@findex pragma
-@defmac HANDLE_PRAGMA_PUSH_POP_MACRO
-Define this macro if you want to support the Win32 style pragmas
-@samp{#pragma push_macro(macro-name-as-string)} and @samp{#pragma
-pop_macro(macro-name-as-string)}. The @samp{#pragma push_macro(
-macro-name-as-string)} pragma saves the named macro and via
-@samp{#pragma pop_macro(macro-name-as-string)} it will return to the
-previous value.
-@end defmac
-
-
@defmac DOLLARS_IN_IDENTIFIERS
Define this macro to control use of the character @samp{$} in
identifier names for the C family of languages. 0 means @samp{$} is
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2eec612..16340e5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,10 @@
-gcc/testsuite/
+2009-11-11 Kai Tietz <kai.tietz@onevision.com>
+
+ * g++.dg/torture/pushpop_macro.C: New testcase.
+ * gcc.c-torture/execute/pushpop_macro.c: New testcase.
+ * gcc.dg/cpp/pragma-pop_macro-1.c: Allow test for all
+ targets.
+
2009-11-11 Jon Beniston <jon@beniston.com>
* lib/target-supports.exp (check_profiling_available): lm32 target
diff --git a/gcc/testsuite/g++.dg/torture/pushpop_macro.C b/gcc/testsuite/g++.dg/torture/pushpop_macro.C
new file mode 100644
index 0000000..98065e6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pushpop_macro.C
@@ -0,0 +1,19 @@
+/* Do the preprocessor push_macro/pop_macro test. */
+
+/* { dg-do run } */
+
+extern "C" void abort ();
+
+#define _ 2
+#pragma push_macro("_")
+#undef _
+#define _ 1
+#pragma pop_macro("_")
+
+int main ()
+{
+ if (_ != 2)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/execute/pushpop_macro.c b/gcc/testsuite/gcc.c-torture/execute/pushpop_macro.c
new file mode 100644
index 0000000..08a8220
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pushpop_macro.c
@@ -0,0 +1,15 @@
+extern void abort ();
+
+#define _ 2
+#pragma push_macro("_")
+#undef _
+#define _ 1
+#pragma pop_macro("_")
+
+int main ()
+{
+ if (_ != 2)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c b/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
index dec67ad..c9a9048 100644
--- a/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
+++ b/gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c
@@ -1,7 +1,7 @@
/* PR preprocessor/35061 */
/* Do nothing if there is nothing on the macro stack to pop. */
-/* { dg-do preprocess { target *-*-mingw* *-*-cygwin* } } */
+/* { dg-do preprocess } */
#define X 1
/* # pragma push_macro("X") */
diff --git a/gcc/testsuite/gcc.dg/pch/pushpop-1.c b/gcc/testsuite/gcc.dg/pch/pushpop-1.c
new file mode 100644
index 0000000..c093e57
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pch/pushpop-1.c
@@ -0,0 +1,11 @@
+#include "pushpop-1.hs"
+
+#if FOO != 2
+#error FOO != 2
+#endif
+#pragma pop_macro("FOO")
+
+#if FOO != 1
+#error FOR != 1
+#endif
+
diff --git a/gcc/testsuite/gcc.dg/pch/pushpop-1.hs b/gcc/testsuite/gcc.dg/pch/pushpop-1.hs
new file mode 100644
index 0000000..e97a4f3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pch/pushpop-1.hs
@@ -0,0 +1,5 @@
+#define FOO 1
+#pragma push_macro ("FOO")
+#undef FOO
+#define FOO 2
+