cppopts.texi (-dU): Document.
gcc: * doc/cppopts.texi (-dU): Document. * c-common.h (flag_dump_macros): Update comment. * c-opts.c (handle_OPT_d): Handle -dU. * c-ppoutput.c (macro_queue, define_queue, undef_queue, dump_queued_macros, cb_used_define, cb_used_undef): New. (init_pp_output): Handle -dU. (cb_line_change): Call dump_queued_macros. * toplev.c (decode_d_option): Accept -dU as preprocessor option. gcc/testsuite: * gcc.dg/cpp/cmdlne-dU-1.c, gcc.dg/cpp/cmdlne-dU-2.c, gcc.dg/cpp/cmdlne-dU-3.c, gcc.dg/cpp/cmdlne-dU-4.c, gcc.dg/cpp/cmdlne-dU-5.c, gcc.dg/cpp/cmdlne-dU-6.c, gcc.dg/cpp/cmdlne-dU-7.c, gcc.dg/cpp/cmdlne-dU-8.c, gcc.dg/cpp/cmdlne-dU-9.c, gcc.dg/cpp/cmdlne-dU-10.c, gcc.dg/cpp/cmdlne-dU-11.c, gcc.dg/cpp/cmdlne-dU-12.c, gcc.dg/cpp/cmdlne-dU-13.c, gcc.dg/cpp/cmdlne-dU-14.c, gcc.dg/cpp/cmdlne-dU-15.c, gcc.dg/cpp/cmdlne-dU-16.c, gcc.dg/cpp/cmdlne-dU-17.c, gcc.dg/cpp/cmdlne-dU-18.c, gcc.dg/cpp/cmdlne-dU-19.c, gcc.dg/cpp/cmdlne-dU-20.c, gcc.dg/cpp/cmdlne-dU-21.c, gcc.dg/cpp/cmdlne-dU-22.c: New tests. libcpp: * include/cpplib.h (struct cpp_callbacks): Add used_define, used_undef and before_define. (NODE_USED): Define. * directives.c (do_define, do_undef, undefine_macros, do_ifdef, do_ifndef, cpp_pop_definition): Handle new flag and use new callbacks. * expr.c (parse_defined): Handle new flag and use new callbacks. * macro.c (enter_macro_context, _cpp_free_definition): Handle new flag and use new callbacks. From-SVN: r133847
This commit is contained in:
parent
e6b69d0e56
commit
93d45d9eda
34 changed files with 360 additions and 6 deletions
|
@ -559,9 +559,14 @@ do_define (cpp_reader *pfile)
|
|||
pfile->state.save_comments =
|
||||
! CPP_OPTION (pfile, discard_comments_in_macro_exp);
|
||||
|
||||
if (pfile->cb.before_define)
|
||||
pfile->cb.before_define (pfile);
|
||||
|
||||
if (_cpp_create_definition (pfile, node))
|
||||
if (pfile->cb.define)
|
||||
pfile->cb.define (pfile, pfile->directive_line, node);
|
||||
|
||||
node->flags &= ~NODE_USED;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -573,6 +578,9 @@ do_undef (cpp_reader *pfile)
|
|||
|
||||
if (node)
|
||||
{
|
||||
if (pfile->cb.before_define)
|
||||
pfile->cb.before_define (pfile);
|
||||
|
||||
if (pfile->cb.undef)
|
||||
pfile->cb.undef (pfile, pfile->directive_line, node);
|
||||
|
||||
|
@ -603,7 +611,7 @@ undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
|
|||
/* Body of _cpp_free_definition inlined here for speed.
|
||||
Macros and assertions no longer have anything to free. */
|
||||
h->type = NT_VOID;
|
||||
h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED);
|
||||
h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED|NODE_USED);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1638,12 +1646,26 @@ do_ifdef (cpp_reader *pfile)
|
|||
|
||||
if (! pfile->state.skipping)
|
||||
{
|
||||
const cpp_hashnode *node = lex_macro_node (pfile, false);
|
||||
cpp_hashnode *node = lex_macro_node (pfile, false);
|
||||
|
||||
if (node)
|
||||
{
|
||||
skip = node->type != NT_MACRO;
|
||||
_cpp_mark_macro_used (node);
|
||||
if (!(node->flags & NODE_USED))
|
||||
{
|
||||
node->flags |= NODE_USED;
|
||||
if (node->type == NT_MACRO)
|
||||
{
|
||||
if (pfile->cb.used_define)
|
||||
pfile->cb.used_define (pfile, pfile->directive_line, node);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pfile->cb.used_undef)
|
||||
pfile->cb.used_undef (pfile, pfile->directive_line, node);
|
||||
}
|
||||
}
|
||||
check_eol (pfile);
|
||||
}
|
||||
}
|
||||
|
@ -1656,7 +1678,7 @@ static void
|
|||
do_ifndef (cpp_reader *pfile)
|
||||
{
|
||||
int skip = 1;
|
||||
const cpp_hashnode *node = 0;
|
||||
cpp_hashnode *node = 0;
|
||||
|
||||
if (! pfile->state.skipping)
|
||||
{
|
||||
|
@ -1666,6 +1688,20 @@ do_ifndef (cpp_reader *pfile)
|
|||
{
|
||||
skip = node->type == NT_MACRO;
|
||||
_cpp_mark_macro_used (node);
|
||||
if (!(node->flags & NODE_USED))
|
||||
{
|
||||
node->flags |= NODE_USED;
|
||||
if (node->type == NT_MACRO)
|
||||
{
|
||||
if (pfile->cb.used_define)
|
||||
pfile->cb.used_define (pfile, pfile->directive_line, node);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pfile->cb.used_undef)
|
||||
pfile->cb.used_undef (pfile, pfile->directive_line, node);
|
||||
}
|
||||
}
|
||||
check_eol (pfile);
|
||||
}
|
||||
}
|
||||
|
@ -2145,6 +2181,9 @@ cpp_pop_definition (cpp_reader *pfile, const char *str, cpp_macro *dfn)
|
|||
if (node == NULL)
|
||||
return;
|
||||
|
||||
if (pfile->cb.before_define)
|
||||
pfile->cb.before_define (pfile);
|
||||
|
||||
if (node->type == NT_MACRO)
|
||||
{
|
||||
if (pfile->cb.undef)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue