Add an attribute to mark function as unwinding

This commit is contained in:
Björn Steinbrink 2015-09-11 20:09:19 +02:00
parent 90c48bed25
commit e4e67bd489
2 changed files with 6 additions and 1 deletions

View file

@ -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);
}
}
}

View file

@ -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",