trans: Add early-out when translating unreachable controlflow expressions.
This commit is contained in:
parent
fed12499e7
commit
e05c2f80da
2 changed files with 128 additions and 2 deletions
|
|
@ -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 }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue