From c9fb347ea14cd8f519a71374c97547044413a71f Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 31 Oct 2018 14:51:54 +0000 Subject: [PATCH] [3/7] Preprocessor macro loc https://gcc.gnu.org/ml/gcc-patches/2018-10/msg02039.html * include/cpplib.h (cpp_macro_definition_location): Make inline. * macro.c (warn_of_redefinition): Fix comments, examine macro type, use C++ for. (cpp_macro_definition_location): Don't define here. From-SVN: r265688 --- libcpp/ChangeLog | 5 +++++ libcpp/include/cpplib.h | 5 ++++- libcpp/macro.c | 20 +++++--------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index bcbfa97a2be..a02a335eae9 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,5 +1,10 @@ 2018-10-31 Nathan Sidwell + * include/cpplib.h (cpp_macro_definition_location): Make inline. + * macro.c (warn_of_redefinition): Fix comments, examine macro + type, use C++ for. + (cpp_macro_definition_location): Don't define here. + * include/cpplib.h (HT_NODE): Don't cast NODE. (NODE_LEN, NODE_NAME): Use HT_NODE. diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 345155b210a..a2dab5237dd 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -1017,7 +1017,10 @@ inline bool cpp_fun_like_macro_p (cpp_hashnode *node) extern const unsigned char *cpp_macro_definition (cpp_reader *, cpp_hashnode *); -extern source_location cpp_macro_definition_location (cpp_hashnode *); +inline source_location cpp_macro_definition_location (cpp_hashnode *node) +{ + return node->value.macro->line; +} extern void _cpp_backup_tokens (cpp_reader *, unsigned int); extern const cpp_token *cpp_peek_token (cpp_reader *, int); diff --git a/libcpp/macro.c b/libcpp/macro.c index aacaf8c3020..bb3d95899d3 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -2980,13 +2980,11 @@ _cpp_backup_tokens (cpp_reader *pfile, unsigned int count) /* #define directive parsing and handling. */ -/* Returns nonzero if a macro redefinition warning is required. */ +/* Returns true if a macro redefinition warning is required. */ static bool warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node, const cpp_macro *macro2) { - unsigned int i; - /* Some redefinitions need to be warned about regardless. */ if (node->flags & NODE_WARN) return true; @@ -3021,18 +3019,18 @@ warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node, return true; /* Check parameter spellings. */ - for (i = 0; i < macro1->paramc; i++) + for (unsigned i = macro1->paramc; i--; ) if (macro1->parm.params[i] != macro2->parm.params[i]) return true; /* Check the replacement text or tokens. */ - if (CPP_OPTION (pfile, traditional)) + if (macro1->kind == cmk_traditional) return _cpp_expansions_different_trad (macro1, macro2); if (macro1->count != macro2->count) return true; - for (i = 0; i < macro1->count; i++) + for (unsigned i= macro1->count; i--; ) if (!_cpp_equiv_tokens (¯o1->exp.tokens[i], ¯o2->exp.tokens[i])) return true; @@ -3439,7 +3437,7 @@ create_iso_definition (cpp_reader *pfile) (pfile, sizeof (cpp_macro) - sizeof (cpp_token) + sizeof (cpp_token) * macro->count); - /* Clear whitespace on first token for warn_of_redefinition(). */ + /* Clear whitespace on first token. */ if (macro->count) macro->exp.tokens[0].flags &= ~PREV_WHITE; @@ -3767,11 +3765,3 @@ cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node) *buffer = '\0'; return pfile->macro_buffer; } - -/* Get the line at which the macro was defined. */ - -source_location -cpp_macro_definition_location (cpp_hashnode *node) -{ - return node->value.macro->line; -} -- 2.30.2