Add an attribute to mark function as unwinding
This commit is contained in:
parent
90c48bed25
commit
e4e67bd489
2 changed files with 6 additions and 1 deletions
|
|
@ -59,7 +59,6 @@ pub fn emit_uwtable(val: ValueRef, emit: bool) {
|
|||
|
||||
/// Tell LLVM whether the function can or cannot unwind.
|
||||
#[inline]
|
||||
#[allow(dead_code)] // possibly useful function
|
||||
pub fn unwind(val: ValueRef, can_unwind: bool) {
|
||||
if can_unwind {
|
||||
unsafe {
|
||||
|
|
@ -118,6 +117,8 @@ pub fn from_fn_attrs(ccx: &CrateContext, attrs: &[hir::Attribute], llfn: ValueRe
|
|||
}
|
||||
} else if attr.check_name("allocator") {
|
||||
llvm::Attribute::NoAlias.apply_llfn(llvm::ReturnIndex as c_uint, llfn);
|
||||
} else if attr.check_name("unwind") {
|
||||
unwind(llfn, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,6 +188,9 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Option<u32>, Status
|
|||
|
||||
// allow `extern "platform-intrinsic" { ... }`
|
||||
("platform_intrinsics", "1.4.0", Some(27731), Active),
|
||||
|
||||
// allow `#[unwind]`
|
||||
("unwind_attributes", "1.4.0", None, Active),
|
||||
];
|
||||
// (changing above list without updating src/doc/reference.md makes @cmr sad)
|
||||
|
||||
|
|
@ -316,6 +319,7 @@ pub const KNOWN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeGat
|
|||
("unsafe_no_drop_flag", Whitelisted, Gated("unsafe_no_drop_flag",
|
||||
"unsafe_no_drop_flag has unstable semantics \
|
||||
and may be removed in the future")),
|
||||
("unwind", Whitelisted, Gated("unwind_attributes", "#[unwind] is experimental")),
|
||||
|
||||
// used in resolve
|
||||
("prelude_import", Whitelisted, Gated("prelude_import",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue