Skip to content

Commit c352ae2

Browse files
committed
Do not run the DA+ConstProp before DropElab
Also fix some more tests.
1 parent e00862b commit c352ae2

File tree

8 files changed

+43
-13
lines changed

8 files changed

+43
-13
lines changed

src/librustc_borrowck/borrowck/mir/gather_moves.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -614,14 +614,10 @@ fn gather_moves<'a, 'tcx>(mir: &Mir<'tcx>, tcx: TyCtxt<'a, 'tcx, 'tcx>) -> MoveD
614614
Rvalue::InlineAsm { .. } => {}
615615
}
616616
}
617-
StatementKind::SetDiscriminant{ ref lvalue, .. } => {
618-
// not a move, is assignment like.
619-
bb_ctxt.builder.create_move_path(lvalue);
620-
let assigned_path = bb_ctxt.builder.move_path_for(lvalue);
621-
bb_ctxt.path_map.fill_to(assigned_path.index());
622-
}
623617
StatementKind::StorageLive(_) |
624618
StatementKind::StorageDead(_) => {}
619+
StatementKind::SetDiscriminant{ .. } =>
620+
bug!("SetDiscriminant and drop elaboration are incompatible")
625621
}
626622
}
627623

src/librustc_borrowck/borrowck/mir/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,6 @@ fn drop_flag_effects_for_location<'a, 'tcx, F>(
369369
let block = &mir[loc.block];
370370
match block.statements.get(loc.index) {
371371
Some(stmt) => match stmt.kind {
372-
repr::StatementKind::SetDiscriminant{ ref lvalue, .. } |
373372
repr::StatementKind::Assign(ref lvalue, _) => {
374373
debug!("drop_flag_effects: assignment {:?}", stmt);
375374
on_all_children_bits(tcx, mir, move_data,
@@ -378,6 +377,8 @@ fn drop_flag_effects_for_location<'a, 'tcx, F>(
378377
}
379378
repr::StatementKind::StorageLive(_) |
380379
repr::StatementKind::StorageDead(_) => {}
380+
repr::StatementKind::SetDiscriminant{ .. } =>
381+
bug!("SetDiscriminant and drop elaboration are incompatible")
381382
},
382383
None => {
383384
debug!("drop_flag_effects: replace {:?}", block.terminator());

src/librustc_driver/driver.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -991,16 +991,15 @@ pub fn phase_4_translate_to_llvm<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
991991

992992
passes.push_pass(box mir::transform::erase_regions::EraseRegions);
993993

994-
passes.push_pass(box mir::transform::deaggregator::Deaggregator);
995-
passes.push_pass(box mir::transform::const_propagate::ConstPropagate);
996-
passes.push_pass(box mir::transform::simplify::SimplifyCfg::new("const-propagate"));
997-
passes.push_pass(box mir::transform::deadcode::DeadCode);
998-
999994
passes.push_pass(box mir::transform::add_call_guards::AddCallGuards);
1000995
passes.push_pass(box borrowck::ElaborateDrops);
1001996
passes.push_pass(box mir::transform::no_landing_pads::NoLandingPads);
1002997
passes.push_pass(box mir::transform::simplify::SimplifyCfg::new("elaborate-drops"));
1003998

999+
passes.push_pass(box mir::transform::deaggregator::Deaggregator);
1000+
passes.push_pass(box mir::transform::const_propagate::ConstPropagate);
1001+
passes.push_pass(box mir::transform::simplify::SimplifyCfg::new("const-propagate"));
1002+
passes.push_pass(box mir::transform::deadcode::DeadCode);
10041003

10051004
passes.push_pass(box mir::transform::simplify::SimplifyLocals);
10061005
passes.push_pass(box mir::transform::add_call_guards::AddCallGuards);

src/test/compile-fail/huge-array.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
fn generic<T: Copy>(t: T) {
1414
let s: [T; 1518600000] = [t; 1518600000];
15+
drop(s);
1516
}
1617

1718
fn main() {

src/test/compile-fail/huge-enum.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
#[cfg(target_pointer_width = "32")]
1616
fn main() {
1717
let big: Option<[u32; (1<<29)-1]> = None;
18+
drop(big);
1819
}
1920

2021
#[cfg(target_pointer_width = "64")]
2122
fn main() {
2223
let big: Option<[u32; (1<<45)-1]> = None;
24+
drop(big);
2325
}

src/test/compile-fail/huge-struct.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,5 @@ struct S1M<T> { val: S1k<S1k<T>> }
5151

5252
fn main() {
5353
let fat: Option<S1M<S1M<S1M<u32>>>> = None;
54+
drop(fat);
5455
}

src/test/compile-fail/issue-15919.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
#[cfg(target_pointer_width = "32")]
1414
fn main() {
1515
let x = [0usize; 0xffff_ffff];
16+
drop(x);
1617
}
1718

1819
#[cfg(target_pointer_width = "64")]
1920
fn main() {
2021
let x = [0usize; 0xffff_ffff_ffff_ffff];
22+
drop(x);
2123
}

src/test/mir-opt/storage_ranges.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,29 @@ fn main() {
1919
}
2020

2121
// END RUST SOURCE
22-
// START rustc.node4.PreTrans.after.mir
22+
// START rustc.node4.SimplifyCfg.initial-after.mir
23+
// bb0: {
24+
// StorageLive(var0);
25+
// var0 = const 0i32;
26+
// StorageLive(var1);
27+
// StorageLive(tmp1);
28+
// StorageLive(tmp2);
29+
// tmp2 = var0;
30+
// tmp1 = std::prelude::v1::Some<i32>(tmp2,);
31+
// var1 = &tmp1;
32+
// StorageDead(tmp2);
33+
// tmp0 = ();
34+
// StorageDead(tmp1);
35+
// StorageDead(var1);
36+
// StorageLive(var2);
37+
// var2 = const 1i32;
38+
// return = ();
39+
// StorageDead(var2);
40+
// StorageDead(var0);
41+
// goto -> bb1;
42+
// }
43+
// END rustc.node4.SimplifyCfg.initial-after.mir
44+
// START rustc.node4.DeadCode.after.mir
2345
// bb0: {
2446
// StorageLive(var0);
2547
// StorageLive(var1);
@@ -34,4 +56,10 @@ fn main() {
3456
// StorageDead(var0);
3557
// goto -> bb1;
3658
// }
59+
// END rustc.node4.DeadCode.after.mir
60+
// START rustc.node4.PreTrans.after.mir
61+
// bb0: {
62+
// return = ();
63+
// goto -> bb1;
64+
// }
3765
// END rustc.node4.PreTrans.after.mir

0 commit comments

Comments
 (0)