about summary refs log tree commit diff
path: root/src/test/mir-opt/inline
diff options
context:
space:
mode:
authorWesley Wiser <wwiser@gmail.com>2019-12-15 14:07:30 -0500
committerWesley Wiser <wwiser@gmail.com>2019-12-20 20:39:47 -0500
commitbec4fc175aaab3a9b633b99642aa8e96375d3e89 (patch)
tree448f3bfe3c2ad6eec1a0862b6b395aa7dc4a25a6 /src/test/mir-opt/inline
parentccd238309f9dce92a05a23c2959e2819668c69a4 (diff)
[mir-opt] Fix `Inline` pass to handle inlining into `box` expressions
Diffstat (limited to 'src/test/mir-opt/inline')
-rw-r--r--src/test/mir-opt/inline/inline-into-box-place.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/test/mir-opt/inline/inline-into-box-place.rs b/src/test/mir-opt/inline/inline-into-box-place.rs
new file mode 100644
index 00000000000..0bb9dfa403d
--- /dev/null
+++ b/src/test/mir-opt/inline/inline-into-box-place.rs
@@ -0,0 +1,71 @@
+// ignore-tidy-linelength
+// ignore-wasm32-bare compiled with panic=abort by default
+#![feature(box_syntax)]
+
+fn main() {
+    let _x: Box<Vec<u32>> = box Vec::new();
+}
+
+// END RUST SOURCE
+// START rustc.main.Inline.before.mir
+// let mut _0: ();
+// let _1: std::boxed::Box<std::vec::Vec<u32>> as UserTypeProjection { base: UserType(0), projs: [] };
+// let mut _2: std::boxed::Box<std::vec::Vec<u32>>;
+// let mut _3: ();
+// scope 1 {
+//   debug _x => _1;
+// }
+// bb0: {
+//   StorageLive(_1);
+//   StorageLive(_2);
+//   _2 = Box(std::vec::Vec<u32>);
+//   (*_2) = const std::vec::Vec::<u32>::new() -> [return: bb2, unwind: bb4];
+// }
+// bb1 (cleanup): {
+//   resume;
+// }
+// bb2: {
+//   _1 = move _2;
+//   StorageDead(_2);
+//   _0 = ();
+//   drop(_1) -> [return: bb3, unwind: bb1];
+// }
+// bb3: {
+//   StorageDead(_1);
+//   return;
+// }
+// bb4 (cleanup): {
+//   _3 = const alloc::alloc::box_free::<std::vec::Vec<u32>>(move (_2.0: std::ptr::Unique<std::vec::Vec<u32>>)) -> bb1;
+// }
+// END rustc.main.Inline.before.mir
+// START rustc.main.Inline.after.mir
+// let mut _0: ();
+// let _1: std::boxed::Box<std::vec::Vec<u32>> as UserTypeProjection { base: UserType(0), projs: [] };
+// let mut _2: std::boxed::Box<std::vec::Vec<u32>>;
+// let mut _3: ();
+// let mut _4: &mut std::vec::Vec<u32>;
+// scope 1 {
+//   debug _x => _1;
+// }
+// scope 2 {
+// }
+// bb0: {
+//   StorageLive(_1);
+//   StorageLive(_2);
+//   _2 = Box(std::vec::Vec<u32>);
+//   _4 = &mut (*_2);
+//   ((*_4).0: alloc::raw_vec::RawVec<u32>) = const alloc::raw_vec::RawVec::<u32>::NEW;
+//   ((*_4).1: usize) = const 0usize;
+//   _1 = move _2;
+//   StorageDead(_2);
+//   _0 = ();
+//   drop(_1) -> [return: bb2, unwind: bb1];
+// }
+// bb1 (cleanup): {
+//   resume;
+// }
+// bb2: {
+//   StorageDead(_1);
+//   return;
+// }
+// END rustc.main.Inline.after.mir