diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-01-04 17:02:41 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-01-04 17:02:41 +0100 |
commit | 94b905273c5476f4e0f3a9de1a86d1c7ef47e7bd (patch) | |
tree | 421d7cbc8b24073def556faa031311219db7a83b /gcc/gcc.c | |
parent | ca30dbc38ee3b9afbbd717dbe2f3487d743863f3 (diff) | |
download | gcc-94b905273c5476f4e0f3a9de1a86d1c7ef47e7bd.zip gcc-94b905273c5476f4e0f3a9de1a86d1c7ef47e7bd.tar.gz gcc-94b905273c5476f4e0f3a9de1a86d1c7ef47e7bd.tar.bz2 |
re PR driver/42442 (-march=native doesn't apply to multiple files)
PR driver/42442
* gcc.c (SWITCH_IGNORE_PERMANENTLY): Define.
(do_self_spec): For switches with SWITCH_IGNORE set set also
SWITCH_IGNORE_PERMANENTLY.
(check_live_switch): Check SWITCH_IGNORE_PERMANENTLY instead
of SWITCH_IGNORE.
From-SVN: r155622
Diffstat (limited to 'gcc/gcc.c')
-rw-r--r-- | gcc/gcc.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -3233,12 +3233,15 @@ See %s for instructions.", SWITCH_LIVE to indicate this switch is true in a conditional spec. SWITCH_FALSE to indicate this switch is overridden by a later switch. SWITCH_IGNORE to indicate this switch should be ignored (used in %<S). + SWITCH_IGNORE_PERMANENTLY to indicate this switch should be ignored + in all do_spec calls afterwards. Used for %<S from self specs. The `validated' field is nonzero if any spec has looked at this switch; if it remains zero at the end of the run, it must be meaningless. */ -#define SWITCH_LIVE 0x1 -#define SWITCH_FALSE 0x2 -#define SWITCH_IGNORE 0x4 +#define SWITCH_LIVE 0x1 +#define SWITCH_FALSE 0x2 +#define SWITCH_IGNORE 0x4 +#define SWITCH_IGNORE_PERMANENTLY 0x8 struct switchstr { @@ -4928,13 +4931,20 @@ do_option_spec (const char *name, const char *spec) static void do_self_spec (const char *spec) { + int i; + do_spec_2 (spec); do_spec_1 (" ", 0, NULL); + /* Mark %<S switches processed by do_self_spec to be ignored permanently. + do_self_specs adds the replacements to switches array, so it shouldn't + be processed afterwards. */ + for (i = 0; i < n_switches; i++) + if ((switches[i].live_cond & SWITCH_IGNORE)) + switches[i].live_cond |= SWITCH_IGNORE_PERMANENTLY; + if (argbuf_index > 0) { - int i; - switches = XRESIZEVEC (struct switchstr, switches, n_switches + argbuf_index + 1); @@ -6448,7 +6458,8 @@ check_live_switch (int switchnum, int prefix_length) if (switches[switchnum].live_cond != 0) return ((switches[switchnum].live_cond & SWITCH_LIVE) != 0 && (switches[switchnum].live_cond & SWITCH_FALSE) == 0 - && (switches[switchnum].live_cond & SWITCH_IGNORE) == 0); + && (switches[switchnum].live_cond & SWITCH_IGNORE_PERMANENTLY) + == 0); /* In the common case of {<at-most-one-letter>*}, a negating switch would always match, so ignore that case. We will just |