aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cpp.texi10
-rw-r--r--gcc/cppinit.c42
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\