diff --git a/src/test/mir-opt/README.md b/src/test/mir-opt/README.md index 28a124e3c61c..d999ff975516 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 000000000000..0059fc930620 --- /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 or the MIT license +// , 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 000000000000..f1562c8c34ce --- /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 or the MIT license +// , 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 000000000000..6990167b4e1c --- /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 or the MIT license +// , 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