summaryrefslogtreecommitdiff
path: root/gcc/cppmacro.c
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-14 07:38:20 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-14 07:38:20 +0000
commitae2348f67b17faf87574e6c1e60328de1900aee5 (patch)
tree5dc2a18484a5feaa3e30f77dadcb35f5c4945fc5 /gcc/cppmacro.c
parentb429d3ee1b1dc11f93cbcac2625e2054afd3be43 (diff)
downloadgcc-ae2348f67b17faf87574e6c1e60328de1900aee5.tar.gz
* c-lex.c (lex_number): Only warn traditionally for U suffix
outside system macros. * cppexp.c (parse_number): Similarly. * cpplib.h (NODE_SYSHDR, cpp_sys_objmacro_p): New. * cppmacro.c (struct cpp_macro): New member node. (parse_args): Only warn about missing rest args if not a system macro. (funlike_invocation_p): Similarly for uninvoked funlike macros. (cpp_sys_objmacro_p): New. (_cpp_create_definition): Store the node with the macro defn. Remember if the macro is defined in a system header. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39661 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cppmacro.c')
-rw-r--r--gcc/cppmacro.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c
index 3b9f64c2c67..7a65e9725e5 100644
--- a/gcc/cppmacro.c
+++ b/gcc/cppmacro.c
@@ -44,6 +44,7 @@ struct cpp_macro
unsigned int fun_like : 1; /* If a function-like macro. */
unsigned int variadic : 1; /* If a variadic macro. */
unsigned int disabled : 1; /* If macro is disabled. */
+ unsigned int syshdr : 1; /* If macro defined in system header. */
};
typedef struct macro_arg macro_arg;
@@ -562,7 +563,7 @@ parse_args (pfile, node)
if (argc + 1 == macro->paramc && macro->variadic)
{
- if (CPP_PEDANTIC (pfile))
+ if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used");
}
else
@@ -616,7 +617,7 @@ funlike_invocation_p (pfile, node, list)
if (maybe_paren.type == CPP_OPEN_PAREN)
args = parse_args (pfile, node);
- else if (CPP_WTRADITIONAL (pfile))
+ else if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
cpp_warning (pfile,
"function-like macro \"%s\" must be used with arguments in traditional C",
node->name);
@@ -995,6 +996,18 @@ cpp_get_token (pfile, token)
save_lookahead_token (pfile, token);
}
+/* Returns true if we're expanding an object-like macro that was
+ defined in a system header. Just checks the macro at the top of
+ the stack. Used for diagnostic suppression. */
+int
+cpp_sys_objmacro_p (pfile)
+ cpp_reader *pfile;
+{
+ cpp_macro *macro = pfile->context->macro;
+
+ return macro && ! macro->fun_like && macro->syshdr;
+}
+
/* Read each token in, until EOF. Directives are transparently
processed. */
void
@@ -1453,6 +1466,9 @@ _cpp_create_definition (pfile, node)
&& macro->expansion[0].type == CPP_NAME
&& macro->expansion[0].val.node == node);
+ /* To suppress some diagnostics. */
+ macro->syshdr = pfile->buffer->sysp != 0;
+
/* Commit the memory. */
POOL_COMMIT (&pfile->macro_pool, macro->count * sizeof (cpp_token));