Commit 86368122 by Neil Booth Committed by Neil Booth

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
parent e1998242
2000-10-31 Neil Booth <neilb@earthling.net> 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 * cppmacro.c (STDC_0_IN_SYSTEM_HEADERS): Define to 0 if
undefined. Remove #ifdef check. undefined. Remove #ifdef check.
* config/i386/sol2.h, config/rs6000/sol2.h, config/sparc/sol2.h: * config/i386/sol2.h, config/rs6000/sol2.h, config/sparc/sol2.h:
......
...@@ -3364,12 +3364,14 @@ Define the macros @var{__GNUC__}, @var{__GNUC_MINOR__} and ...@@ -3364,12 +3364,14 @@ Define the macros @var{__GNUC__}, @var{__GNUC_MINOR__} and
@var{__GNUC_PATCHLEVEL__}. These are defined automatically when you use @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}. @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 @findex -A
Make an assertion with the predicate @var{predicate} and answer 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 Disable an assertion with the predicate @var{predicate} and answer
@var{answer}. Specifying no predicate, by @samp{-A-} or @samp{-A -}, @var{answer}. Specifying no predicate, by @samp{-A-} or @samp{-A -},
disables all predefined assertions and all assertions preceding it on disables all predefined assertions and all assertions preceding it on
......
...@@ -107,6 +107,7 @@ static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **, ...@@ -107,6 +107,7 @@ static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **,
int)); int));
static struct answer ** find_answer PARAMS ((cpp_hashnode *, static struct answer ** find_answer PARAMS ((cpp_hashnode *,
const struct answer *)); const struct answer *));
static void handle_assertion PARAMS ((cpp_reader *, const char *, int));
/* This is the table of directive handlers. It is ordered by /* This is the table of directive handlers. It is ordered by
frequency of occurrence; the numbers at the end are directive frequency of occurrence; the numbers at the end are directive
...@@ -1608,29 +1609,25 @@ cpp_define (pfile, str) ...@@ -1608,29 +1609,25 @@ cpp_define (pfile, str)
char *buf, *p; char *buf, *p;
size_t count; size_t count;
p = strchr (str, '=');
/* Copy the entire option so we can modify it. /* Copy the entire option so we can modify it.
Change the first "=" in the string to a space. If there is none, 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) if (p)
{ buf[p - str] = ' ';
count = strlen (str) + 2;
buf = (char *) alloca (count);
memcpy (buf, str, count - 2);
buf[p - str] = ' ';
buf[count - 2] = '\n';
buf[count - 1] = '\0';
}
else else
{ {
count = strlen (str) + 4; buf[count++] = ' ';
buf = (char *) alloca (count); buf[count++] = '1';
memcpy (buf, str, count - 4);
strcpy (&buf[count-4], " 1\n");
} }
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) /* Slight variant of the above for use by initialize_builtins, which (a)
...@@ -1659,7 +1656,7 @@ cpp_assert (pfile, str) ...@@ -1659,7 +1656,7 @@ cpp_assert (pfile, str)
cpp_reader *pfile; cpp_reader *pfile;
const char *str; 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. */ /* Process STR as if it appeared as the body of an #unassert. */
...@@ -1668,9 +1665,34 @@ cpp_unassert (pfile, str) ...@@ -1668,9 +1665,34 @@ cpp_unassert (pfile, str)
cpp_reader *pfile; cpp_reader *pfile;
const char *str; 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. */ /* Determine whether the identifier ID, of length LEN, is a defined macro. */
int int
cpp_defined (pfile, id, len) cpp_defined (pfile, id, len)
......
/* 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment