aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2018-10-31 14:51:54 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2018-10-31 14:51:54 +0000
commitc9fb347ea14cd8f519a71374c97547044413a71f (patch)
treea075488d4fef537b97d9429136a5011de627d980
parent43af5ef1cefc671f7baf3d0e33d46ab7f9a7d8b1 (diff)
downloadgcc-c9fb347ea14cd8f519a71374c97547044413a71f.zip
gcc-c9fb347ea14cd8f519a71374c97547044413a71f.tar.gz
gcc-c9fb347ea14cd8f519a71374c97547044413a71f.tar.bz2
[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
-rw-r--r--libcpp/ChangeLog5
-rw-r--r--libcpp/include/cpplib.h5
-rw-r--r--libcpp/macro.c20
3 files changed, 14 insertions, 16 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index bcbfa97..a02a335 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,5 +1,10 @@
2018-10-31 Nathan Sidwell <nathan@acm.org>
+ * 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 345155b..a2dab52 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 aacaf8c..bb3d958 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 (&macro1->exp.tokens[i], &macro2->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;
-}