diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-10-31 18:38:44 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-10-31 18:38:44 +0100 |
commit | aa23e73b1a090659344ff88361135bd947064e30 (patch) | |
tree | ab29c66793009b48773fdd1844beac65d7c2a2a1 /libcpp/directives.c | |
parent | 0092b21f24a6778a54caac4015db1d0ad6291a45 (diff) | |
download | gcc-aa23e73b1a090659344ff88361135bd947064e30.zip gcc-aa23e73b1a090659344ff88361135bd947064e30.tar.gz gcc-aa23e73b1a090659344ff88361135bd947064e30.tar.bz2 |
re PR preprocessor/92296 (internal compiler error: Segmentation fault #pragma push_macro("__LINE__"))
PR preprocessor/92296
* internal.h (struct def_pragma_macro): Add is_builtin bitfield.
(_cpp_restore_special_builtin): Declare.
* init.c (_cpp_restore_special_builtin): New function.
* directives.c (do_pragma_push_macro): For NT_BUILTIN_MACRO
set is_builtin and don't try to grab definition.
(cpp_pop_definition): Use _cpp_restore_special_builtin to restore
builtin macros.
* c-c++-common/cpp/pr92296-1.c: New test.
* c-c++-common/cpp/pr92296-2.c: New test.
From-SVN: r277685
Diffstat (limited to 'libcpp/directives.c')
-rw-r--r-- | libcpp/directives.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libcpp/directives.c b/libcpp/directives.c index 61f1fef..6e011a1 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1582,6 +1582,8 @@ do_pragma_push_macro (cpp_reader *pfile) node = _cpp_lex_identifier (pfile, c->name); if (node->type == NT_VOID) c->is_undef = 1; + else if (node->type == NT_BUILTIN_MACRO) + c->is_builtin = 1; else { defn = cpp_macro_definition (pfile, node); @@ -2470,6 +2472,11 @@ cpp_pop_definition (cpp_reader *pfile, struct def_pragma_macro *c) if (c->is_undef) return; + if (c->is_builtin) + { + _cpp_restore_special_builtin (pfile, c); + return; + } { size_t namelen; |