about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2019-04-30 21:51:55 +0100
committervarkor <github@varkor.com>2019-05-05 10:45:10 +0100
commite6da57f3e713b8b3adef209940335a8f6bfa642f (patch)
tree0ec70ec0c7821800309d0e4e2ccbd40b9db4d1a3 /src
parentd65e721ef824becd76773368718701cd0db83e59 (diff)
Fix argument alias handling for -O and -C opt-level
Diffstat (limited to 'src')
-rw-r--r--src/librustc/session/config.rs11
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) {