trans: Add early-out when translating unreachable controlflow expressions.

This commit is contained in:
Michael Woerister 2015-03-05 10:46:45 +01:00
parent fed12499e7
commit e05c2f80da
2 changed files with 128 additions and 2 deletions

View file

@ -26,6 +26,22 @@ fn after_return() {
(a, ref b) => {}
}
for a in &[111i32] {}
let test = if some_predicate() { 1 } else { 2 };
while some_predicate() {
let abc = !some_predicate();
}
loop {
let abc = !some_predicate();
break;
}
// nested block
{
let abc = !some_predicate();
{
let def = !some_predicate();
}
}
}
fn after_panic() {
@ -36,6 +52,22 @@ fn after_panic() {
(a, ref b) => {}
}
for a in &[111i32] {}
let test = if some_predicate() { 1 } else { 2 };
while some_predicate() {
let abc = !some_predicate();
}
loop {
let abc = !some_predicate();
break;
}
// nested block
{
let abc = !some_predicate();
{
let def = !some_predicate();
}
}
}
fn after_diverging_function() {
@ -46,6 +78,22 @@ fn after_diverging_function() {
(a, ref b) => {}
}
for a in &[111i32] {}
let test = if some_predicate() { 1 } else { 2 };
while some_predicate() {
let abc = !some_predicate();
}
loop {
let abc = !some_predicate();
break;
}
// nested block
{
let abc = !some_predicate();
{
let def = !some_predicate();
}
}
}
fn after_break() {
@ -57,18 +105,50 @@ fn after_break() {
(a, ref b) => {}
}
for a in &[111i32] {}
let test = if some_predicate() { 1 } else { 2 };
while some_predicate() {
let abc = !some_predicate();
}
loop {
let abc = !some_predicate();
break;
}
// nested block
{
let abc = !some_predicate();
{
let def = !some_predicate();
}
}
}
}
fn after_continue() {
for _ in 0..10i32 {
break;
continue;
let x = "0";
let (ref y,z) = (1i32, 2u32);
match (20i32, 'c') {
(a, ref b) => {}
}
for a in &[111i32] {}
let test = if some_predicate() { 1 } else { 2 };
while some_predicate() {
let abc = !some_predicate();
}
loop {
let abc = !some_predicate();
break;
}
// nested block
{
let abc = !some_predicate();
{
let def = !some_predicate();
}
}
}
}
@ -83,3 +163,6 @@ fn main() {
fn diverge() -> ! {
panic!();
}
fn some_predicate() -> bool { true || false }