Skip to content

Commit

Permalink
Add tests for intrinsics::unreachable
Browse files Browse the repository at this point in the history
  • Loading branch information
Keegan McAllister committed Oct 5, 2014
1 parent 401aeaf commit 675aa76
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/test/run-make/intrinsic-unreachable/Makefile
@@ -0,0 +1,15 @@
-include ../tools.mk

ifndef IS_WINDOWS
# The assembly for exit-unreachable.rs should be shorter because it's missing
# (at minimum) a return instruction.

all:
$(RUSTC) -O --emit asm exit-ret.rs
$(RUSTC) -O --emit asm exit-unreachable.rs
test `wc -l < $(TMPDIR)/exit-unreachable.s` -lt `wc -l < $(TMPDIR)/exit-ret.s`
else
# Because of Windows exception handling, the code is not necessarily any shorter.
# https://github.com/llvm-mirror/llvm/commit/64b2297786f7fd6f5fa24cdd4db0298fbf211466
all:
endif
20 changes: 20 additions & 0 deletions src/test/run-make/intrinsic-unreachable/exit-ret.rs
@@ -0,0 +1,20 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(asm)]
#![crate_type="lib"]

pub fn exit(n: uint) {
unsafe {
// Pretend this asm is an exit() syscall.
asm!("" :: "r"(n) :: "volatile");
// Can't actually reach this point, but rustc doesn't know that.
}
}
22 changes: 22 additions & 0 deletions src/test/run-make/intrinsic-unreachable/exit-unreachable.rs
@@ -0,0 +1,22 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(asm)]
#![crate_type="lib"]

use std::intrinsics;

pub fn exit(n: uint) -> ! {
unsafe {
// Pretend this asm is an exit() syscall.
asm!("" :: "r"(n) :: "volatile");
intrinsics::unreachable()
}
}
24 changes: 24 additions & 0 deletions src/test/run-pass/intrinsic-unreachable.rs
@@ -0,0 +1,24 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

use std::intrinsics;

// See also src/test/run-make/intrinsic-unreachable.

unsafe fn f(x: uint) -> uint {
match x {
17 => 23,
_ => intrinsics::unreachable(),
}
}

fn main() {
assert_eq!(unsafe { f(17) }, 23);
}

5 comments on commit 675aa76

@bors
Copy link
Contributor

@bors bors commented on 675aa76 Oct 5, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from thestinger
at kmcallister@675aa76

@bors
Copy link
Contributor

@bors bors commented on 675aa76 Oct 5, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging kmcallister/rust/llvm-unreachable = 675aa76 into auto

@bors
Copy link
Contributor

@bors bors commented on 675aa76 Oct 5, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kmcallister/rust/llvm-unreachable = 675aa76 merged ok, testing candidate = 5660db2

@bors
Copy link
Contributor

@bors bors commented on 675aa76 Oct 5, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors
Copy link
Contributor

@bors bors commented on 675aa76 Oct 5, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 5660db2

Please sign in to comment.