aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Booth <neilb@earthling.net>2000-10-31 23:34:59 +0000
committerNeil Booth <neil@gcc.gnu.org>2000-10-31 23:34:59 +0000
commit86368122e68f2b697cf898523d408bea831fa6e7 (patch)
treee504a7a4e2c4a7bde207adaf17b32b6b047226da
parente199824280b56df47f390fbbdc727f9219d4408f (diff)
downloadgcc-86368122e68f2b697cf898523d408bea831fa6e7.zip
gcc-86368122e68f2b697cf898523d408bea831fa6e7.tar.gz
gcc-86368122e68f2b697cf898523d408bea831fa6e7.tar.bz2
cpp.texi: Update for new command line assertion syntax.
* cpp.texi: Update for new command line assertion syntax. * cpplib.c (cpp_define): Simplify a bit. (cpp_assert, cpp_unassert): Use handle_assertion. (handle_assertion): New function; accept new command line syntax with '='. * testsuite/gcc.dg/cpp/assert3.c: New tests. From-SVN: r37171
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cpp.texi8
-rw-r--r--gcc/cpplib.c58
-rw-r--r--gcc/testsuite/gcc.dg/cpp/assert3.c10
4 files changed, 64 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b76c51e..b27a49a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2000-10-31 Neil Booth <neilb@earthling.net>
+ * cpp.texi: Update for new command line assertion syntax.
+ * cpplib.c (cpp_define): Simplify a bit.
+ (cpp_assert, cpp_unassert): Use handle_assertion.
+ (handle_assertion): New function; accept new command line
+ syntax with '='.
+ * testsuite/gcc.dg/cpp/assert3.c: New tests.
+
+2000-10-31 Neil Booth <neilb@earthling.net>
+
* cppmacro.c (STDC_0_IN_SYSTEM_HEADERS): Define to 0 if
undefined. Remove #ifdef check.
* config/i386/sol2.h, config/rs6000/sol2.h, config/sparc/sol2.h:
diff --git a/gcc/cpp.texi b/gcc/cpp.texi
index ffbd323..457cbf2 100644
--- a/gcc/cpp.texi
+++ b/gcc/cpp.texi
@@ -3364,12 +3364,14 @@ Define the macros @var{__GNUC__}, @var{__GNUC_MINOR__} and
@var{__GNUC_PATCHLEVEL__}. These are defined automatically when you use
@samp{gcc -E}; you can turn them off in that case with @samp{-no-gcc}.
-@item -A @var{predicate}(@var{answer})
+@item -A @var{predicate}=@var{answer}
@findex -A
Make an assertion with the predicate @var{predicate} and answer
-@var{answer}. @xref{Assertions}.
+@var{answer}. This form is preferred to the older form @samp{-A
+@var{predicate}(@var{answer})}, which is still supported, because
+it does not use shell special characters. @xref{Assertions}.
-@item -A -@var{predicate}(@var{answer})
+@item -A -@var{predicate}=@var{answer}
Disable an assertion with the predicate @var{predicate} and answer
@var{answer}. Specifying no predicate, by @samp{-A-} or @samp{-A -},
disables all predefined assertions and all assertions preceding it on
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 12fa982..cd14ba4 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -107,6 +107,7 @@ static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
int));
static struct answer ** find_answer PARAMS ((cpp_hashnode *,
const struct answer *));
+static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
/* This is the table of directive handlers. It is ordered by
frequency of occurrence; the numbers at the end are directive
@@ -1608,29 +1609,25 @@ cpp_define (pfile, str)
char *buf, *p;
size_t count;
- p = strchr (str, '=');
/* Copy the entire option so we can modify it.
Change the first "=" in the string to a space. If there is none,
- tack " 1" on the end. Then add a newline and a NUL. */
-
+ tack " 1" on the end. */
+
+ /* Length including the null. */
+ count = strlen (str);
+ buf = (char *) alloca (count + 2);
+ memcpy (buf, str, count);
+
+ p = strchr (str, '=');
if (p)
- {
- count = strlen (str) + 2;
- buf = (char *) alloca (count);
- memcpy (buf, str, count - 2);
- buf[p - str] = ' ';
- buf[count - 2] = '\n';
- buf[count - 1] = '\0';
- }
+ buf[p - str] = ' ';
else
{
- count = strlen (str) + 4;
- buf = (char *) alloca (count);
- memcpy (buf, str, count - 4);
- strcpy (&buf[count-4], " 1\n");
+ buf[count++] = ' ';
+ buf[count++] = '1';
}
- run_directive (pfile, T_DEFINE, buf, count - 1, 0);
+ run_directive (pfile, T_DEFINE, buf, count, 0);
}
/* Slight variant of the above for use by initialize_builtins, which (a)
@@ -1659,7 +1656,7 @@ cpp_assert (pfile, str)
cpp_reader *pfile;
const char *str;
{
- run_directive (pfile, T_ASSERT, str, strlen (str), 0);
+ handle_assertion (pfile, str, T_ASSERT);
}
/* Process STR as if it appeared as the body of an #unassert. */
@@ -1668,9 +1665,34 @@ cpp_unassert (pfile, str)
cpp_reader *pfile;
const char *str;
{
- run_directive (pfile, T_UNASSERT, str, strlen (str), 0);
+ handle_assertion (pfile, str, T_UNASSERT);
}
+/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
+static void
+handle_assertion (pfile, str, type)
+ cpp_reader *pfile;
+ const char *str;
+ int type;
+{
+ size_t count = strlen (str);
+ const char *p = strchr (str, '=');
+
+ if (p)
+ {
+ /* Copy the entire option so we can modify it. Change the first
+ "=" in the string to a '(', and tack a ')' on the end. */
+ char *buf = (char *) alloca (count + 1);
+
+ memcpy (buf, str, count);
+ buf[p - str] = '(';
+ buf[count++] = ')';
+ str = buf;
+ }
+
+ run_directive (pfile, type, str, count, 0);
+}
+
/* Determine whether the identifier ID, of length LEN, is a defined macro. */
int
cpp_defined (pfile, id, len)
diff --git a/gcc/testsuite/gcc.dg/cpp/assert3.c b/gcc/testsuite/gcc.dg/cpp/assert3.c
new file mode 100644
index 0000000..df9b19f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/assert3.c
@@ -0,0 +1,10 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc. */
+
+/* { dg-do preprocess } */
+/* { dg-options "-A abc=def -A abc\(ghi\) \"-Aabc = jkl\" -A abc=mno -A -abc=mno" } */
+
+/* Test -A command line syntax. Source Neil Booth. 31 Oct 2000. */
+
+#if !#abc (def) || !#abc (ghi) || !#abc (jkl) || #abc(mno)
+#error Command line -A assertions
+#endif