Commit 10ebf5fe by Neil Booth

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
parent 4f3d0af4
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> 2000-11-22 Michael Meissner <meissner@redhat.com>
* d30v.h (TARGET_SWITCHES): Add documentation strings. * d30v.h (TARGET_SWITCHES): Add documentation strings.
......
...@@ -4720,6 +4720,7 @@ handle_braces (p) ...@@ -4720,6 +4720,7 @@ handle_braces (p)
{ {
const char *filter, *body = NULL, *endbody = NULL; const char *filter, *body = NULL, *endbody = NULL;
int pipe_p = 0; int pipe_p = 0;
int true_once = 0; /* If, in %{a|b:d}, at least one of a,b was seen. */
int negate; int negate;
int suffix; int suffix;
int include_blanks = 1; int include_blanks = 1;
...@@ -4924,11 +4925,8 @@ next_member: ...@@ -4924,11 +4925,8 @@ next_member:
give_switch (i, 0, include_blanks); give_switch (i, 0, include_blanks);
} }
else else
{ /* Even if many alternatives are matched, only output once. */
if (do_spec_1 (save_string (body, endbody - body - 1), true_once = 1;
0, NULL_PTR) < 0)
return 0;
}
} }
else if (pipe_p) else if (pipe_p)
{ {
...@@ -4943,6 +4941,14 @@ next_member: ...@@ -4943,6 +4941,14 @@ next_member:
if (*p++ == '|') if (*p++ == '|')
goto next_member; 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; return endbody;
} }
...@@ -5938,19 +5944,21 @@ validate_switches (start) ...@@ -5938,19 +5944,21 @@ validate_switches (start)
register const char *p = start; register const char *p = start;
const char *filter; const char *filter;
register int i; register int i;
int suffix = 0; int suffix;
if (*p == '|') if (*p == '|')
++p; ++p;
next_member:
if (*p == '!') if (*p == '!')
++p; ++p;
suffix = 0;
if (*p == '.') if (*p == '.')
suffix = 1, ++p; suffix = 1, ++p;
filter = p; filter = p;
while (*p != ':' && *p != '}') while (*p != ':' && *p != '}' && *p != '|')
p++; p++;
if (suffix) if (suffix)
...@@ -5958,9 +5966,8 @@ validate_switches (start) ...@@ -5958,9 +5966,8 @@ validate_switches (start)
else if (p[-1] == '*') else if (p[-1] == '*')
{ {
/* Mark all matching switches as valid. */ /* Mark all matching switches as valid. */
--p;
for (i = 0; i < n_switches; i++) 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; switches[i].validated = 1;
} }
else else
...@@ -5973,6 +5980,9 @@ validate_switches (start) ...@@ -5973,6 +5980,9 @@ validate_switches (start)
switches[i].validated = 1; switches[i].validated = 1;
} }
} }
if (*p++ == '|')
goto next_member;
} }
/* Check whether a particular argument was used. The first time we /* Check whether a particular argument was used. The first time we
......
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