about summary refs log tree commit diff
path: root/src/librustc
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-09-25 07:25:56 -0700
committerbors <bors@rust-lang.org>2013-09-25 07:25:56 -0700
commit5375cf87182555e7d91089b95c088793db32fa05 (patch)
tree151ea1fd6f61c0feceb20524759e3911f4f154b7 /src/librustc
parent797a373cd14493dd5e1c1d2f37ca46473f32b5ef (diff)
parente76bfae7eb4405091625b973f1fbe1e8859afb15 (diff)
downloadrust-5375cf87182555e7d91089b95c088793db32fa05.tar.gz
rust-5375cf87182555e7d91089b95c088793db32fa05.zip
auto merge of #9491 : thestinger/rust/noreturn, r=huonw
Closes #9317
Diffstat (limited to 'src/librustc')
-rw-r--r--src/librustc/middle/trans/base.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs
index 010d2fb12c5..479f10a3b4a 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) => {