diff options
| author | bors <bors@rust-lang.org> | 2021-05-07 16:24:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-05-07 16:24:46 +0000 |
| commit | ca712bc4255cd0912e00ec2eee5b6a547385c2b0 (patch) | |
| tree | ff4d9ea888df4811d26c260f8bd532d901c016df /compiler/rustc_codegen_llvm/src | |
| parent | e5f83d24aee866a14753a7cedbb4e301dfe5bef5 (diff) | |
| parent | 42848090b588a53bc31cfe3718090f488a69633e (diff) | |
| download | rust-ca712bc4255cd0912e00ec2eee5b6a547385c2b0.tar.gz rust-ca712bc4255cd0912e00ec2eee5b6a547385c2b0.zip | |
Auto merge of #85036 - Dylan-DPC:rollup-4qfabo3, r=Dylan-DPC
Rollup of 9 pull requests Successful merges: - #84254 (illumos should put libc last in library search order) - #84442 (Unify rustc and rustdoc parsing of `cfg()`) - #84655 (Cleanup of `wasm`) - #84866 (linker: Avoid library duplication with `/WHOLEARCHIVE`) - #84930 (rename LLVM target for RustyHermit) - #84991 (rustc: Support Rust-specific features in -Ctarget-feature) - #85029 (SGX mutex is movable) - #85030 (Rearrange SGX split module files) - #85033 (some further small cleanups) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/llvm_util.rs | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs index b44553e4f6d..6101b90aea6 100644 --- a/compiler/rustc_codegen_llvm/src/llvm_util.rs +++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs @@ -339,24 +339,32 @@ pub fn llvm_global_features(sess: &Session) -> Vec<String> { Some(_) | None => {} }; + let filter = |s: &str| { + if s.is_empty() { + return None; + } + let feature = if s.starts_with("+") || s.starts_with("-") { + &s[1..] + } else { + return Some(s.to_string()); + }; + // Rustc-specific feature requests like `+crt-static` or `-crt-static` + // are not passed down to LLVM. + if RUSTC_SPECIFIC_FEATURES.contains(&feature) { + return None; + } + // ... otherwise though we run through `to_llvm_feature` feature when + // passing requests down to LLVM. This means that all in-language + // features also work on the command line instead of having two + // different names when the LLVM name and the Rust name differ. + Some(format!("{}{}", &s[..1], to_llvm_feature(sess, feature))) + }; + // Features implied by an implicit or explicit `--target`. - features.extend( - sess.target - .features - .split(',') - .filter(|f| !f.is_empty() && !RUSTC_SPECIFIC_FEATURES.iter().any(|s| f.contains(s))) - .map(String::from), - ); + features.extend(sess.target.features.split(',').filter_map(&filter)); // -Ctarget-features - features.extend( - sess.opts - .cg - .target_feature - .split(',') - .filter(|f| !f.is_empty() && !RUSTC_SPECIFIC_FEATURES.iter().any(|s| f.contains(s))) - .map(String::from), - ); + features.extend(sess.opts.cg.target_feature.split(',').filter_map(&filter)); features } |
