Add intrinsics::unreachable

This commit is contained in:
Keegan McAllister
2014-09-03 12:00:08 -07:00
parent 1f3cda8bd8
commit 401aeaf6d3
3 changed files with 12 additions and 0 deletions
+7
View File
@@ -250,6 +250,13 @@ fn visit_leave_fn(&mut self, purity: uint, proto: uint,
/// Abort the execution of the process.
pub fn abort() -> !;
/// Tell LLVM that this point in the code is not reachable,
/// enabling further optimizations.
///
/// NB: This is very different from the `unreachable!()` macro!
#[cfg(not(stage0))]
pub fn unreachable() -> !;
/// Execute a breakpoint trap, for inspection by a debugger.
pub fn breakpoint();
+4
View File
@@ -228,6 +228,10 @@ pub fn trans_intrinsic_call<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>, node: ast::N
Unreachable(bcx);
v
}
(_, "unreachable") => {
Unreachable(bcx);
C_nil(ccx)
}
(_, "breakpoint") => {
let llfn = ccx.get_intrinsic(&("llvm.debugtrap"));
Call(bcx, llfn, [], None)
+1
View File
@@ -5589,6 +5589,7 @@ fn param(ccx: &CrateCtxt, n: uint) -> ty::t {
} else {
match name.get() {
"abort" => (0, Vec::new(), ty::mk_bot()),
"unreachable" => (0, Vec::new(), ty::mk_bot()),
"breakpoint" => (0, Vec::new(), ty::mk_nil()),
"size_of" |
"pref_align_of" | "min_align_of" => (1u, Vec::new(), ty::mk_uint()),