diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cpp.texi | 10 | ||||
-rw-r--r-- | gcc/cppinit.c | 42 |
3 files changed, 39 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 84abbeb..d45e3e66 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-03-16 Neil Booth <NeilB@earthling.net> + + * cppinit.c (handle_option): Implement #unassert directive + as -A- command line option. + (print_help): Update. + * cpptexi.c: Update. + Thu Mar 16 02:14:16 2000 Hans-Peter Nilsson <hp@bitrange.com> * md.texi (Standard Names): Document `jump'. diff --git a/gcc/cpp.texi b/gcc/cpp.texi index af784c1..0d2b2ee 100644 --- a/gcc/cpp.texi +++ b/gcc/cpp.texi @@ -2887,10 +2887,12 @@ Define the macros @var{__GNUC__}, @var{__GNUC_MINOR__} and Make an assertion with the predicate @var{predicate} and answer @var{answer}. @xref{Assertions}. -@noindent -You can use @samp{-A-} to disable all predefined assertions; it also -undefines all predefined macros and all macros that preceded it on the -command line. +@item -A -@var{predicate}(@var{answer}) +Disable an assertion with the predicate @var{predicate} and answer +@var{answer}. Specifiying no predicate, by @samp{-A-} or @samp{-A -}, +disables all predefined assertions and all assertions preceding it on +the command line; and also undefines all predefined macros and all +macros preceding it on the command line. @item -dM @findex -dM diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 674e140..4192573 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -1493,26 +1493,35 @@ handle_option (pfile, argc, argv) opts->no_output = 1; break; case OPT_A: - if (strcmp (arg, "-")) - new_pending_directive (opts, arg, cpp_assert); - else + if (arg[0] == '-') { - /* -A- eliminates all predefined macros and assertions. - Let's include also any that were specified earlier - on the command line. That way we can get rid of any - that were passed automatically in from GCC. */ - struct pending_option *o1, *o2; - - o1 = opts->pending->directive_head; - while (o1) + /* -A with an argument beginning with '-' acts as + #unassert on whatever immediately follows the '-'. + If "-" is the whole argument, we eliminate all + predefined macros and assertions, including those + that were specified earlier on the command line. + That way we can get rid of any that were passed + automatically in from GCC. */ + + if (arg[1] == '\0') { - o2 = o1->next; - free (o1); - o1 = o2; + struct pending_option *o1, *o2; + + o1 = opts->pending->directive_head; + while (o1) + { + o2 = o1->next; + free (o1); + o1 = o2; + } + opts->pending->directive_head = NULL; + opts->pending->directive_tail = NULL; } - opts->pending->directive_head = NULL; - opts->pending->directive_tail = NULL; + else + new_pending_directive (opts, arg + 1, cpp_unassert); } + else + new_pending_directive (opts, arg, cpp_assert); break; case OPT_U: new_pending_directive (opts, arg, cpp_undef); @@ -1750,6 +1759,7 @@ Switches:\n\ -D<macro> Define a <macro> with string '1' as its value\n\ -D<macro>=<val> Define a <macro> with <val> as its value\n\ -A<question> (<answer>) Assert the <answer> to <question>\n\ + -A-<question> (<answer>) Disable the <answer> to <question>\n\ -U<macro> Undefine <macro> \n\ -v Display the version number\n\ -H Print the name of header files as they are used\n\ |