From e76bfae7eb4405091625b973f1fbe1e8859afb15 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 25 Sep 2013 04:40:45 -0400 Subject: [PATCH] add `noreturn` attribute to functions returning ! Closes #9317 --- src/librustc/middle/trans/base.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 49b4d711f86..822f9e32d93 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -220,6 +220,12 @@ pub fn decl_rust_fn(ccx: &mut CrateContext, inputs: &[ty::t], output: ty::t, let llfn = decl_cdecl_fn(ccx.llmod, name, llfty); match ty::get(output).sty { + // functions returning bottom may unwind, but can never return normally + ty::ty_bot => { + unsafe { + llvm::LLVMAddFunctionAttr(llfn, lib::llvm::NoReturnAttribute as c_uint) + } + } // `~` pointer return values never alias because ownership is transferred ty::ty_uniq(*) | ty::ty_evec(_, ty::vstore_uniq) => {