diff options
| author | bors <bors@rust-lang.org> | 2013-05-21 16:13:15 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-21 16:13:15 -0700 |
| commit | 15e44381af4f6d89fc62111a8425087ccab40665 (patch) | |
| tree | 24356c71253f638a8e45abdf399a77a45d88f3ea | |
| parent | 799f281b43bbd52c01c5e404cc09674ec52eb696 (diff) | |
| parent | 8c68c4a52cc98608793bdab8188d76ce02649d68 (diff) | |
| download | rust-15e44381af4f6d89fc62111a8425087ccab40665.tar.gz rust-15e44381af4f6d89fc62111a8425087ccab40665.zip | |
auto merge of #6665 : catamorphism/rust/issue-5741, r=nikomatsakis
r? @nikomatsakis The way we deal with unreachable expressions in trans is pretty ad hoc, but this at least doesn't make it worse, and eliminates the LLVM assertion failure reported in #5741.
| -rw-r--r-- | src/librustc/middle/trans/expr.rs | 4 | ||||
| -rw-r--r-- | src/test/run-pass/issue-5741.rs | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index f457cc80da8..9349c2bcd26 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -499,6 +499,10 @@ fn trans_rvalue_stmt_unadjusted(bcx: block, expr: @ast::expr) -> block { let mut bcx = bcx; let _icx = bcx.insn_ctxt("trans_rvalue_stmt"); + if bcx.unreachable { + return bcx; + } + trace_span!(bcx, expr.span, @shorten(bcx.expr_to_str(expr))); match expr.node { diff --git a/src/test/run-pass/issue-5741.rs b/src/test/run-pass/issue-5741.rs new file mode 100644 index 00000000000..b80e37a425b --- /dev/null +++ b/src/test/run-pass/issue-5741.rs @@ -0,0 +1,14 @@ +// Copyright 2013 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. + +fn main() { + return; + while io::stdin().read_line() != ~"quit" { }; +} |
