gcc.c (do_spec): Issue a warning for '%[]' usage.
Tue Jul 21 00:31:01 1998 Jeffrey A Law (law@cygnus.com) * gcc.c (do_spec): Issue a warning for '%[]' usage. * Undo this change. * gcc.c: Delete %[spec] support. (do_spec_1, case '('): Likewise. (do_spec_1, case '['): Call error. From-SVN: r21314
This commit is contained in:
parent
952fc2ed3a
commit
4089dfabe1
|
@ -1,3 +1,12 @@
|
|||
Tue Jul 21 00:31:01 1998 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* gcc.c (do_spec): Issue a warning for '%[]' usage.
|
||||
|
||||
* Undo this change.
|
||||
* gcc.c: Delete %[spec] support.
|
||||
(do_spec_1, case '('): Likewise.
|
||||
(do_spec_1, case '['): Call error.
|
||||
|
||||
Mon Jul 20 22:34:17 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* alpha.h (CPP_SPEC): Tidy. Hook to cpp_cpu and cpp_subtarget.
|
||||
|
|
73
gcc/gcc.c
73
gcc/gcc.c
|
@ -365,6 +365,7 @@ or with constant text in a single argument.
|
|||
%{S|P:X} substitutes X if either -S or -P was given to CC. This may be
|
||||
combined with ! and . as above binding stronger than the OR.
|
||||
%(Spec) processes a specification defined in a specs file as *Spec:
|
||||
%[Spec] as above, but put __ around -D arguments
|
||||
|
||||
The conditional text X in a %{S:X} or %{!S:X} construct may contain
|
||||
other nested % constructs or spaces, or even newlines. They are
|
||||
|
@ -1110,7 +1111,8 @@ skip_whitespace (p)
|
|||
}
|
||||
|
||||
/* Structure to keep track of the specs that have been defined so far.
|
||||
These are accessed using %(specname) in a compiler or link spec. */
|
||||
These are accessed using %(specname) or %[specname] in a compiler
|
||||
or link spec. */
|
||||
|
||||
struct spec_list
|
||||
{
|
||||
|
@ -4033,7 +4035,11 @@ do_spec_1 (spec, inswitch, soft_matched_part)
|
|||
|
||||
/* Process a string found as the value of a spec given by name.
|
||||
This feature allows individual machine descriptions
|
||||
to add and use their own specs. */
|
||||
to add and use their own specs.
|
||||
%[...] modifies -D options the way %P does;
|
||||
%(...) uses the spec unmodified. */
|
||||
case '[':
|
||||
warning ("use of obsolete %%[ operator in specs");
|
||||
case '(':
|
||||
{
|
||||
char *name = p;
|
||||
|
@ -4042,7 +4048,7 @@ do_spec_1 (spec, inswitch, soft_matched_part)
|
|||
|
||||
/* The string after the S/P is the name of a spec that is to be
|
||||
processed. */
|
||||
while (*p && *p != ')')
|
||||
while (*p && *p != ')' && *p != ']')
|
||||
p++;
|
||||
|
||||
/* See if it's in the list */
|
||||
|
@ -4051,32 +4057,67 @@ do_spec_1 (spec, inswitch, soft_matched_part)
|
|||
{
|
||||
name = *(sl->ptr_spec);
|
||||
#ifdef DEBUG_SPECS
|
||||
fprintf (stderr, "Processing spec %s, which is '%s'\n",
|
||||
sl->name, name);
|
||||
fprintf (stderr, "Processing spec %c%s%c, which is '%s'\n",
|
||||
c, sl->name, (c == '(') ? ')' : ']', name);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
if (sl)
|
||||
{
|
||||
value = do_spec_1 (name, 0, NULL_PTR);
|
||||
if (value != 0)
|
||||
return value;
|
||||
if (c == '(')
|
||||
{
|
||||
value = do_spec_1 (name, 0, NULL_PTR);
|
||||
if (value != 0)
|
||||
return value;
|
||||
}
|
||||
else
|
||||
{
|
||||
char *x = (char *) alloca (strlen (name) * 2 + 1);
|
||||
char *buf = x;
|
||||
char *y = name;
|
||||
int flag = 0;
|
||||
|
||||
/* Copy all of NAME into BUF, but put __ after
|
||||
every -D and at the end of each arg, */
|
||||
while (1)
|
||||
{
|
||||
if (! strncmp (y, "-D", 2))
|
||||
{
|
||||
*x++ = '-';
|
||||
*x++ = 'D';
|
||||
*x++ = '_';
|
||||
*x++ = '_';
|
||||
y += 2;
|
||||
flag = 1;
|
||||
continue;
|
||||
}
|
||||
else if (flag && (*y == ' ' || *y == '\t' || *y == '='
|
||||
|| *y == '}' || *y == 0))
|
||||
{
|
||||
*x++ = '_';
|
||||
*x++ = '_';
|
||||
flag = 0;
|
||||
}
|
||||
if (*y == 0)
|
||||
break;
|
||||
else
|
||||
*x++ = *y++;
|
||||
}
|
||||
*x = 0;
|
||||
|
||||
value = do_spec_1 (buf, 0, NULL_PTR);
|
||||
if (value != 0)
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
/* Discard the closing paren. */
|
||||
/* Discard the closing paren or bracket. */
|
||||
if (*p)
|
||||
p++;
|
||||
}
|
||||
break;
|
||||
|
||||
/* This used to be like %(, except that it modified -D options
|
||||
the same way as %P. This has been obsoleted, as it was not
|
||||
useful for obtaining correct ISO C semantics for defines. */
|
||||
case '[':
|
||||
error ("use of obsolete %[ operator in specs");
|
||||
return -1;
|
||||
|
||||
case 'v':
|
||||
{
|
||||
int c1 = *p++; /* Select first or second version number. */
|
||||
|
|
Loading…
Reference in New Issue