Querify global_backend_features
At the very least this serves to deduplicate the diagnostics that are output about unknown target features provided via CLI.
This commit is contained in:
parent
c97c216efd
commit
df701a292c
10 changed files with 58 additions and 48 deletions
|
@ -79,13 +79,11 @@ pub fn sanitize_attrs<'ll>(
|
|||
}
|
||||
if enabled.contains(SanitizerSet::MEMTAG) {
|
||||
// Check to make sure the mte target feature is actually enabled.
|
||||
let sess = cx.tcx.sess;
|
||||
let features = llvm_util::llvm_global_features(sess).join(",");
|
||||
let mte_feature_enabled = features.rfind("+mte");
|
||||
let mte_feature_disabled = features.rfind("-mte");
|
||||
|
||||
if mte_feature_enabled.is_none() || (mte_feature_disabled > mte_feature_enabled) {
|
||||
sess.err("`-Zsanitizer=memtag` requires `-Ctarget-feature=+mte`");
|
||||
let features = cx.tcx.global_backend_features(());
|
||||
let mte_feature =
|
||||
features.iter().map(|s| &s[..]).rfind(|n| ["+mte", "-mte"].contains(&&n[..]));
|
||||
if let None | Some("-mte") = mte_feature {
|
||||
cx.tcx.sess.err("`-Zsanitizer=memtag` requires `-Ctarget-feature=+mte`");
|
||||
}
|
||||
|
||||
attrs.push(llvm::AttributeKind::SanitizeMemTag.create_attr(cx.llcx));
|
||||
|
@ -415,10 +413,11 @@ pub fn from_fn_attrs<'ll, 'tcx>(
|
|||
}
|
||||
|
||||
if !function_features.is_empty() {
|
||||
let mut global_features = llvm_util::llvm_global_features(cx.tcx.sess);
|
||||
global_features.extend(function_features.into_iter());
|
||||
let features = global_features.join(",");
|
||||
let val = CString::new(features).unwrap();
|
||||
let global_features = cx.tcx.global_backend_features(()).iter().map(|s| &s[..]);
|
||||
let val = global_features
|
||||
.chain(function_features.iter().map(|s| &s[..]))
|
||||
.intersperse(",")
|
||||
.collect::<SmallCStr>();
|
||||
to_add.push(llvm::CreateAttrStringValue(cx.llcx, cstr!("target-features"), &val));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue