Skip to content

Commit 1e79144

Browse files
authored
Rollup merge of #72502 - RalfJung:generator-discr-ty, r=jonas-schievink
fix discriminant type in generator transform The generator transform assumed that the discriminant type is always `isize`, which is not correct, leading to [ICEs in Miri](https://github.com/rust-lang/rust/pull/72419/files#r429543536) when some extra sanity checking got enabled. r? @jonas-schievink @eddyb
2 parents ee92ddf + b388f96 commit 1e79144

File tree

3 files changed

+3
-3
lines changed

3 files changed

+3
-3
lines changed

src/librustc_mir/transform/generator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ impl TransformVisitor<'tcx> {
266266

267267
// Create a statement which reads the discriminant into a temporary
268268
fn get_discr(&self, body: &mut Body<'tcx>) -> (Statement<'tcx>, Place<'tcx>) {
269-
let temp_decl = LocalDecl::new(self.tcx.types.isize, body.span).internal();
269+
let temp_decl = LocalDecl::new(self.discr_ty, body.span).internal();
270270
let local_decls_len = body.local_decls.push(temp_decl);
271271
let temp = Place::from(local_decls_len);
272272

src/test/mir-opt/generator-drop-cleanup/rustc.main-{{closure}}.generator_drop.0.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn main::{{closure}}#0(_1: *mut [generator@$DIR/generator-drop-cleanup.rs:10:15:
99
let mut _5: (); // in scope 0 at $DIR/generator-drop-cleanup.rs:12:9: 12:14
1010
let mut _7: (); // in scope 0 at $DIR/generator-drop-cleanup.rs:10:18: 10:18
1111
let mut _8: (); // in scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
12-
let mut _9: isize; // in scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
12+
let mut _9: u32; // in scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
1313
scope 1 {
1414
debug _s => (((*_1) as variant#3).0: std::string::String); // in scope 1 at $DIR/generator-drop-cleanup.rs:11:13: 11:15
1515
}

src/test/mir-opt/generator-tiny/rustc.main-{{closure}}.generator_resume.0.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fn main::{{closure}}#0(_1: std::pin::Pin<&mut [generator@$DIR/generator-tiny.rs:
1212
let _8: (); // in scope 0 at $DIR/generator-tiny.rs:23:13: 23:21
1313
let mut _9: (); // in scope 0 at $DIR/generator-tiny.rs:19:25: 19:25
1414
let _10: u8; // in scope 0 at $DIR/generator-tiny.rs:19:17: 19:19
15-
let mut _11: isize; // in scope 0 at $DIR/generator-tiny.rs:19:16: 25:6
15+
let mut _11: u32; // in scope 0 at $DIR/generator-tiny.rs:19:16: 25:6
1616
scope 1 {
1717
debug _d => (((*(_1.0: &mut [generator@$DIR/generator-tiny.rs:19:16: 25:6 {u8, HasDrop, ()}])) as variant#3).0: HasDrop); // in scope 1 at $DIR/generator-tiny.rs:20:13: 20:15
1818
}

0 commit comments

Comments
 (0)