diff options
| author | varkor <github@varkor.com> | 2019-04-30 21:51:55 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2019-05-05 10:45:10 +0100 |
| commit | e6da57f3e713b8b3adef209940335a8f6bfa642f (patch) | |
| tree | 0ec70ec0c7821800309d0e4e2ccbd40b9db4d1a3 /src | |
| parent | d65e721ef824becd76773368718701cd0db83e59 (diff) | |
Fix argument alias handling for -O and -C opt-level
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/session/config.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index ad80e5d74bd..b6d3ee882b3 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -2181,10 +2181,15 @@ pub fn build_session_options_and_crate_config( TargetTriple::from_triple(host_triple()) }; let opt_level = { - if matches.opt_present("O") { - if cg.opt_level.is_some() { - early_error(error_format, "-O and -C opt-level both provided"); + let max_o = matches.opt_positions("O").into_iter().max(); + let max_c = matches.opt_strs_pos("C").into_iter().flat_map(|(i, s)| { + if let Some("opt-level") = s.splitn(2, '=').next() { + Some(i) + } else { + None } + }).max(); + if max_o > max_c { OptLevel::Default } else { match cg.opt_level.as_ref().map(String::as_ref) { |
