Auto merge of #81234 - repnop:fn-alignment, r=lcnr
Allow specifying alignment for functions Fixes #75072 This allows the user to specify alignment for functions, which can be useful for low level work where functions need to necessarily be aligned to a specific value. I believe the error cases not covered in the match are caught earlier based on my testing so I had them just return `None`.
This commit is contained in:
commit
a6e7a5aa5d
18 changed files with 137 additions and 83 deletions
|
@ -15,6 +15,8 @@
|
|||
//! At present, however, we do run collection across all items in the
|
||||
//! crate as a kind of pass. This should eventually be factored away.
|
||||
|
||||
// ignore-tidy-filelength
|
||||
|
||||
use crate::astconv::{AstConv, SizedByDefault};
|
||||
use crate::bounds::Bounds;
|
||||
use crate::check::intrinsic::intrinsic_operation_unsafety;
|
||||
|
@ -2889,6 +2891,36 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
|
|||
None
|
||||
}
|
||||
};
|
||||
} else if tcx.sess.check_name(attr, sym::repr) {
|
||||
codegen_fn_attrs.alignment = match attr.meta_item_list() {
|
||||
Some(items) => match items.as_slice() {
|
||||
[item] => match item.name_value_literal() {
|
||||
Some((sym::align, literal)) => {
|
||||
let alignment = rustc_attr::parse_alignment(&literal.kind);
|
||||
|
||||
match alignment {
|
||||
Ok(align) => Some(align),
|
||||
Err(msg) => {
|
||||
struct_span_err!(
|
||||
tcx.sess.diagnostic(),
|
||||
attr.span,
|
||||
E0589,
|
||||
"invalid `repr(align)` attribute: {}",
|
||||
msg
|
||||
)
|
||||
.emit();
|
||||
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
},
|
||||
[] => None,
|
||||
_ => None,
|
||||
},
|
||||
None => None,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue