1
Fork 0

Further codegen_attrs cleanups

This commit is contained in:
Nilstrieb 2023-03-13 19:35:24 +00:00
parent e4ab642e8c
commit 1d70bd4970

View file

@ -331,24 +331,33 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: DefId) -> CodegenFnAttrs {
no_sanitize_span = Some(attr.span); no_sanitize_span = Some(attr.span);
if let Some(list) = attr.meta_item_list() { if let Some(list) = attr.meta_item_list() {
for item in list.iter() { for item in list.iter() {
if item.has_name(sym::address) { match item.ident().map(|ident| ident.name) {
Some(sym::address) => {
codegen_fn_attrs.no_sanitize |= codegen_fn_attrs.no_sanitize |=
SanitizerSet::ADDRESS | SanitizerSet::KERNELADDRESS; SanitizerSet::ADDRESS | SanitizerSet::KERNELADDRESS;
} else if item.has_name(sym::cfi) { }
Some(sym::cfi) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::CFI; codegen_fn_attrs.no_sanitize |= SanitizerSet::CFI;
} else if item.has_name(sym::kcfi) { }
Some(sym::kcfi) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::KCFI; codegen_fn_attrs.no_sanitize |= SanitizerSet::KCFI;
} else if item.has_name(sym::memory) { }
Some(sym::memory) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::MEMORY; codegen_fn_attrs.no_sanitize |= SanitizerSet::MEMORY;
} else if item.has_name(sym::memtag) { }
Some(sym::memtag) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::MEMTAG; codegen_fn_attrs.no_sanitize |= SanitizerSet::MEMTAG;
} else if item.has_name(sym::shadow_call_stack) { }
Some(sym::shadow_call_stack) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::SHADOWCALLSTACK; codegen_fn_attrs.no_sanitize |= SanitizerSet::SHADOWCALLSTACK;
} else if item.has_name(sym::thread) { }
Some(sym::thread) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::THREAD; codegen_fn_attrs.no_sanitize |= SanitizerSet::THREAD;
} else if item.has_name(sym::hwaddress) { }
Some(sym::hwaddress) => {
codegen_fn_attrs.no_sanitize |= SanitizerSet::HWADDRESS; codegen_fn_attrs.no_sanitize |= SanitizerSet::HWADDRESS;
} else { }
_ => {
tcx.sess tcx.sess
.struct_span_err(item.span(), "invalid argument for `no_sanitize`") .struct_span_err(item.span(), "invalid argument for `no_sanitize`")
.note("expected one of: `address`, `cfi`, `hwaddress`, `kcfi`, `memory`, `memtag`, `shadow-call-stack`, or `thread`") .note("expected one of: `address`, `cfi`, `hwaddress`, `kcfi`, `memory`, `memtag`, `shadow-call-stack`, or `thread`")
@ -357,6 +366,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: DefId) -> CodegenFnAttrs {
} }
} }
} }
}
sym::instruction_set => { sym::instruction_set => {
codegen_fn_attrs.instruction_set = codegen_fn_attrs.instruction_set =
attr.meta_item_list().and_then(|l| match &l[..] { attr.meta_item_list().and_then(|l| match &l[..] {
@ -417,15 +427,11 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: DefId) -> CodegenFnAttrs {
}) })
} }
sym::repr => { sym::repr => {
codegen_fn_attrs.alignment = match attr.meta_item_list() { codegen_fn_attrs.alignment = if let Some(items) = attr.meta_item_list()
Some(items) => match items.as_slice() { && let [item] = items.as_slice()
[item] => match item.name_value_literal() { && let Some((sym::align, literal)) = item.name_value_literal()
Some((sym::align, literal)) => { {
let alignment = rustc_attr::parse_alignment(&literal.kind); rustc_attr::parse_alignment(&literal.kind).map_err(|msg| {
match alignment {
Ok(align) => Some(align),
Err(msg) => {
struct_span_err!( struct_span_err!(
tcx.sess.diagnostic(), tcx.sess.diagnostic(),
attr.span, attr.span,
@ -434,17 +440,10 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: DefId) -> CodegenFnAttrs {
msg msg
) )
.emit(); .emit();
})
.ok()
} else {
None None
}
}
}
_ => None,
},
[] => None,
_ => None,
},
None => None,
}; };
} }
_ => {} _ => {}