diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2009-11-11 18:37:19 +0000 |
---|---|---|
committer | Kai Tietz <ktietz@gcc.gnu.org> | 2009-11-11 19:37:19 +0100 |
commit | 17e7cb855000baa6598005571d7dd49cfac5282a (patch) | |
tree | e54ead3691775dbb1e9d31588966d79cac024672 /gcc | |
parent | 110532c838d2302c88de13ad88f81ec975ed4b1e (diff) | |
download | gcc-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/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/c-pragma.c | 142 | ||||
-rw-r--r-- | gcc/config/i386/cygming.h | 2 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pushpop_macro.C | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/pushpop_macro.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/pragma-pop_macro-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pch/pushpop-1.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pch/pushpop-1.hs | 5 |
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 + |