gcc.c (validate_switches): Validate multiple switches named in '|' (or) expressions in specs.
* gcc.c (validate_switches): Validate multiple switches named in '|' (or) expressions in specs. (handle_braces): If more than 1 alternative in a '|' spec matches, call do_spec1 just once. From-SVN: r37667
This commit is contained in:
parent
4f3d0af4a4
commit
10ebf5fe40
@ -1,3 +1,11 @@
|
||||
2000-11-22 Chris Demetriou <cgd@sibyte.com>
|
||||
2000-11-22 Neil Booth <neilb@earthling.net>
|
||||
|
||||
* gcc.c (validate_switches): Validate multiple switches named
|
||||
in '|' (or) expressions in specs.
|
||||
(handle_braces): If more than 1 alternative in a '|' spec
|
||||
matches, call do_spec1 just once.
|
||||
|
||||
2000-11-22 Michael Meissner <meissner@redhat.com>
|
||||
|
||||
* d30v.h (TARGET_SWITCHES): Add documentation strings.
|
||||
|
28
gcc/gcc.c
28
gcc/gcc.c
@ -4720,6 +4720,7 @@ handle_braces (p)
|
||||
{
|
||||
const char *filter, *body = NULL, *endbody = NULL;
|
||||
int pipe_p = 0;
|
||||
int true_once = 0; /* If, in %{a|b:d}, at least one of a,b was seen. */
|
||||
int negate;
|
||||
int suffix;
|
||||
int include_blanks = 1;
|
||||
@ -4924,11 +4925,8 @@ next_member:
|
||||
give_switch (i, 0, include_blanks);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (do_spec_1 (save_string (body, endbody - body - 1),
|
||||
0, NULL_PTR) < 0)
|
||||
return 0;
|
||||
}
|
||||
/* Even if many alternatives are matched, only output once. */
|
||||
true_once = 1;
|
||||
}
|
||||
else if (pipe_p)
|
||||
{
|
||||
@ -4943,6 +4941,14 @@ next_member:
|
||||
if (*p++ == '|')
|
||||
goto next_member;
|
||||
|
||||
/* Process the spec just once, regardless of match count. */
|
||||
if (true_once)
|
||||
{
|
||||
if (do_spec_1 (save_string (body, endbody - body - 1),
|
||||
0, NULL_PTR) < 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return endbody;
|
||||
}
|
||||
|
||||
@ -5938,19 +5944,21 @@ validate_switches (start)
|
||||
register const char *p = start;
|
||||
const char *filter;
|
||||
register int i;
|
||||
int suffix = 0;
|
||||
int suffix;
|
||||
|
||||
if (*p == '|')
|
||||
++p;
|
||||
|
||||
next_member:
|
||||
if (*p == '!')
|
||||
++p;
|
||||
|
||||
suffix = 0;
|
||||
if (*p == '.')
|
||||
suffix = 1, ++p;
|
||||
|
||||
filter = p;
|
||||
while (*p != ':' && *p != '}')
|
||||
while (*p != ':' && *p != '}' && *p != '|')
|
||||
p++;
|
||||
|
||||
if (suffix)
|
||||
@ -5958,9 +5966,8 @@ validate_switches (start)
|
||||
else if (p[-1] == '*')
|
||||
{
|
||||
/* Mark all matching switches as valid. */
|
||||
--p;
|
||||
for (i = 0; i < n_switches; i++)
|
||||
if (!strncmp (switches[i].part1, filter, p - filter))
|
||||
if (!strncmp (switches[i].part1, filter, p - filter - 1))
|
||||
switches[i].validated = 1;
|
||||
}
|
||||
else
|
||||
@ -5973,6 +5980,9 @@ validate_switches (start)
|
||||
switches[i].validated = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (*p++ == '|')
|
||||
goto next_member;
|
||||
}
|
||||
|
||||
/* Check whether a particular argument was used. The first time we
|
||||
|
Loading…
Reference in New Issue
Block a user