Skip to content

Commit e8bfba7

Browse files
committed
fix field type, add test
1 parent bda46c2 commit e8bfba7

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/librustc_mir/transform/deaggregator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl<'tcx> MirPass<'tcx> for Deaggregator {
5959
bb.statements.reserve(n + operands.len() + suffix_stmts.len());
6060
for (i, op) in operands.iter().enumerate() {
6161
let ref variant_def = adt_def.variants[variant];
62-
let ty = variant_def.fields[variant].ty(tcx, substs);
62+
let ty = variant_def.fields[i].ty(tcx, substs);
6363
let rhs = Rvalue::Use(op.clone());
6464

6565
// since we don't handle enums, we don't need a cast

src/test/mir-opt/deaggregator_test.rs

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
struct Baz {
12+
x: usize,
13+
y: f32,
14+
z: bool,
15+
}
16+
17+
fn bar(a: usize) -> Baz {
18+
Baz { x: a, y: 0.0, z: false }
19+
}
20+
21+
fn main() {}
22+
23+
// END RUST SOURCE
24+
// START rustc.node13.Deaggregator.before.mir
25+
// bb0: {
26+
// var0 = arg0; // scope 0 at main.rs:8:8: 8:9
27+
// tmp0 = var0; // scope 1 at main.rs:9:14: 9:15
28+
// return = Baz { x: tmp0, y: const F32(0), z: const false }; // scope ...
29+
// goto -> bb1; // scope 1 at main.rs:8:1: 10:2
30+
// }
31+
// END rustc.node13.Deaggregator.before.mir
32+
// START rustc.node13.Deaggregator.after.mir
33+
// bb0: {
34+
// var0 = arg0; // scope 0 at main.rs:8:8: 8:9
35+
// tmp0 = var0; // scope 1 at main.rs:9:14: 9:15
36+
// (return.0: usize) = tmp0; // scope 1 at main.rs:9:5: 9:34
37+
// (return.1: f32) = const F32(0); // scope 1 at main.rs:9:5: 9:34
38+
// (return.2: bool) = const false; // scope 1 at main.rs:9:5: 9:34
39+
// goto -> bb1; // scope 1 at main.rs:8:1: 10:2
40+
// }
41+
// END rustc.node13.Deaggregator.after.mir

0 commit comments

Comments
 (0)