about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/mir-opt/README.md11
-rw-r--r--src/test/mir-opt/validate_1.rs48
-rw-r--r--src/test/mir-opt/validate_2.rs26
-rw-r--r--src/test/mir-opt/validate_3.rs45
4 files changed, 121 insertions, 9 deletions
diff --git a/src/test/mir-opt/README.md b/src/test/mir-opt/README.md
index 28a124e3c61..d999ff97551 100644
--- a/src/test/mir-opt/README.md
+++ b/src/test/mir-opt/README.md
@@ -57,13 +57,6 @@ the lines being too long.
 
 compiletest handles dumping the MIR before and after every pass for you.  The
 test writer only has to specify the file names of the dumped files (not the
-full path to the file) and what lines to expect.  I added an option to rustc
+full path to the file) and what lines to expect.  There is an option to rustc
 that tells it to dump the mir into some directly (rather then always dumping to
-the current directory).  
-
-Lines match ignoring whitespace, and the prefix "//" is removed of course.
-
-It also currently strips trailing comments -- partly because the full file path
-in "scope comments" is unpredictable and partly because tidy complains about
-the lines being too long.
-
+the current directory).
diff --git a/src/test/mir-opt/validate_1.rs b/src/test/mir-opt/validate_1.rs
new file mode 100644
index 00000000000..0059fc93062
--- /dev/null
+++ b/src/test/mir-opt/validate_1.rs
@@ -0,0 +1,48 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags: -Z verbose -Z mir-emit-validate
+
+fn foo(_x: &mut i32) {}
+
+fn main() {
+    let mut x = 0;
+    foo(&mut x);
+}
+
+// END RUST SOURCE
+// START rustc.node4.EraseRegions.after.mir
+// fn foo(_1: &ReErased mut i32) -> () {
+//     bb0: {
+//         Validate(Acquire, [_1@&ReFree(DefId { krate: CrateNum(0), node: DefIndex(3) => validate_1/8cd878b::foo[0] }, BrAnon(0)) mut i32]);
+//         return;
+//     }
+// }
+// END rustc.node4.EraseRegions.after.mir
+// START rustc.node11.EraseRegions.after.mir
+// fn main() -> () {
+//     bb0: {
+//         Validate(Suspend(ReScope(Misc(NodeId(20)))), [_1@i32]);
+//         _4 = &ReErased mut _1;
+//         Validate(Acquire, [(*_4)@i32/ReScope(Misc(NodeId(20)))]);
+//         Validate(Suspend(ReScope(Misc(NodeId(20)))), [(*_4)@i32/ReScope(Misc(NodeId(20)))]);
+//         _3 = &ReErased mut (*_4);
+//         Validate(Acquire, [(*_3)@i32/ReScope(Misc(NodeId(20)))]);
+//         Validate(Release, [_3@&ReScope(Misc(NodeId(20))) mut i32]);
+//         _2 = const foo(_3) -> bb1;
+//     }
+//
+//     bb1: {
+//         Validate(Acquire, [_2@()]);
+//         EndRegion(ReScope(Misc(NodeId(20))));
+//         return;
+//     }
+// }
+// END rustc.node11.EraseRegions.after.mir
diff --git a/src/test/mir-opt/validate_2.rs b/src/test/mir-opt/validate_2.rs
new file mode 100644
index 00000000000..f1562c8c34c
--- /dev/null
+++ b/src/test/mir-opt/validate_2.rs
@@ -0,0 +1,26 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags: -Z verbose -Z mir-emit-validate
+
+fn main() {
+    let _x : Box<[i32]> = Box::new([1, 2, 3]);
+}
+
+// END RUST SOURCE
+// START rustc.node4.EraseRegions.after.mir
+// fn main() -> () {
+//     bb1: {
+//         Validate(Release, [_2@std::boxed::Box<[i32; 3]>]);
+//         _1 = _2 as std::boxed::Box<[i32]> (Unsize);
+//         Validate(Acquire, [_1@std::boxed::Box<[i32]>]);
+//     }
+// }
+// END rustc.node4.EraseRegions.after.mir
diff --git a/src/test/mir-opt/validate_3.rs b/src/test/mir-opt/validate_3.rs
new file mode 100644
index 00000000000..6990167b4e1
--- /dev/null
+++ b/src/test/mir-opt/validate_3.rs
@@ -0,0 +1,45 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags: -Z verbose -Z mir-emit-validate
+
+struct Test {
+    x: i32
+}
+
+fn foo(_x: &i32) {}
+
+fn main() {
+    let t = Test { x: 0 };
+    let t = &t;
+    foo(&t.x);
+}
+
+// END RUST SOURCE
+// START rustc.node16.EraseRegions.after.mir
+// fn main() -> () {
+//     let mut _5: &ReErased i32;
+//     bb0: {
+//         Validate(Suspend(ReScope(Misc(NodeId(31)))), [((*_2).0: i32)@i32/ReScope(Remainder(BlockRemainder { block: NodeId(18), first_statement_index: 1 })) (imm)]);
+//         _5 = &ReErased ((*_2).0: i32);
+//         Validate(Acquire, [(*_5)@i32/ReScope(Misc(NodeId(31))) (imm)]);
+//         Validate(Suspend(ReScope(Misc(NodeId(31)))), [(*_5)@i32/ReScope(Misc(NodeId(31))) (imm)]);
+//         _4 = &ReErased (*_5);
+//         Validate(Acquire, [(*_4)@i32/ReScope(Misc(NodeId(31))) (imm)]);
+//         Validate(Release, [_4@&ReScope(Misc(NodeId(31))) i32]);
+//         _3 = const foo(_4) -> bb1;
+//     }
+//     bb1: {
+//         EndRegion(ReScope(Misc(NodeId(31))));
+//         EndRegion(ReScope(Remainder(BlockRemainder { block: NodeId(18), first_statement_index: 1 })));
+//         return;
+//     }
+// }
+// END rustc.node16.EraseRegions.after.mir