From ac4d0965bb8cbab327cd26306ba4de2036d7d0fd Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Wed, 18 Oct 2023 17:40:14 +0000 Subject: FileCheck const_prop_miscompile. --- .../indirect_mutation.bar.ConstProp.diff | 41 ++++++++++++++++++++++ .../indirect_mutation.foo.ConstProp.diff | 35 ++++++++++++++++++ tests/mir-opt/const_prop/indirect_mutation.rs | 41 ++++++++++++++++++++++ .../const_prop_miscompile.bar.ConstProp.diff | 41 ---------------------- .../const_prop_miscompile.foo.ConstProp.diff | 35 ------------------ tests/mir-opt/const_prop_miscompile.rs | 24 ------------- 6 files changed, 117 insertions(+), 100 deletions(-) create mode 100644 tests/mir-opt/const_prop/indirect_mutation.bar.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/indirect_mutation.foo.ConstProp.diff create mode 100644 tests/mir-opt/const_prop/indirect_mutation.rs delete mode 100644 tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff delete mode 100644 tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff delete mode 100644 tests/mir-opt/const_prop_miscompile.rs diff --git a/tests/mir-opt/const_prop/indirect_mutation.bar.ConstProp.diff b/tests/mir-opt/const_prop/indirect_mutation.bar.ConstProp.diff new file mode 100644 index 00000000000..4eafb8d0917 --- /dev/null +++ b/tests/mir-opt/const_prop/indirect_mutation.bar.ConstProp.diff @@ -0,0 +1,41 @@ +- // MIR for `bar` before ConstProp ++ // MIR for `bar` after ConstProp + + fn bar() -> () { + let mut _0: (); + let mut _1: (i32,); + let _2: (); + let mut _3: *mut i32; + let mut _5: i32; + scope 1 { + debug v => _1; + let _4: bool; + scope 2 { + } + scope 3 { + debug y => _4; + } + } + + bb0: { + StorageLive(_1); + _1 = (const 1_i32,); + StorageLive(_2); + StorageLive(_3); + _3 = &raw mut (_1.0: i32); + (*_3) = const 5_i32; + StorageDead(_3); + _2 = const (); + StorageDead(_2); + StorageLive(_4); + StorageLive(_5); + _5 = (_1.0: i32); + _4 = Eq(move _5, const 5_i32); + StorageDead(_5); + _0 = const (); + StorageDead(_4); + StorageDead(_1); + return; + } + } + diff --git a/tests/mir-opt/const_prop/indirect_mutation.foo.ConstProp.diff b/tests/mir-opt/const_prop/indirect_mutation.foo.ConstProp.diff new file mode 100644 index 00000000000..445d9895d6a --- /dev/null +++ b/tests/mir-opt/const_prop/indirect_mutation.foo.ConstProp.diff @@ -0,0 +1,35 @@ +- // MIR for `foo` before ConstProp ++ // MIR for `foo` after ConstProp + + fn foo() -> () { + let mut _0: (); + let mut _1: (i32,); + let mut _2: &mut i32; + let mut _4: i32; + scope 1 { + debug u => _1; + let _3: bool; + scope 2 { + debug y => _3; + } + } + + bb0: { + StorageLive(_1); + _1 = (const 1_i32,); + StorageLive(_2); + _2 = &mut (_1.0: i32); + (*_2) = const 5_i32; + StorageDead(_2); + StorageLive(_3); + StorageLive(_4); + _4 = (_1.0: i32); + _3 = Eq(move _4, const 5_i32); + StorageDead(_4); + _0 = const (); + StorageDead(_3); + StorageDead(_1); + return; + } + } + diff --git a/tests/mir-opt/const_prop/indirect_mutation.rs b/tests/mir-opt/const_prop/indirect_mutation.rs new file mode 100644 index 00000000000..ec9da6e8e5c --- /dev/null +++ b/tests/mir-opt/const_prop/indirect_mutation.rs @@ -0,0 +1,41 @@ +// unit-test: ConstProp +// Check that we do not propagate past an indirect mutation. +#![feature(raw_ref_op)] + +// EMIT_MIR indirect_mutation.foo.ConstProp.diff +fn foo() { + // CHECK-LABEL: fn foo( + // CHECK: debug u => _1; + // CHECK: debug y => _3; + // CHECK: _1 = (const 1_i32,); + // CHECK: _2 = &mut (_1.0: i32); + // CHECK: (*_2) = const 5_i32; + // CHECK: _4 = (_1.0: i32); + // CHECK: _3 = Eq(move _4, const 5_i32); + + let mut u = (1,); + *&mut u.0 = 5; + let y = { u.0 } == 5; +} + +// EMIT_MIR indirect_mutation.bar.ConstProp.diff +fn bar() { + // CHECK-LABEL: fn bar( + // CHECK: debug v => _1; + // CHECK: debug y => _4; + // CHECK: _3 = &raw mut (_1.0: i32); + // CHECK: (*_3) = const 5_i32; + // CHECK: _5 = (_1.0: i32); + // CHECK: _4 = Eq(move _5, const 5_i32); + + let mut v = (1,); + unsafe { + *&raw mut v.0 = 5; + } + let y = { v.0 } == 5; +} + +fn main() { + foo(); + bar(); +} diff --git a/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff b/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff deleted file mode 100644 index 4eafb8d0917..00000000000 --- a/tests/mir-opt/const_prop_miscompile.bar.ConstProp.diff +++ /dev/null @@ -1,41 +0,0 @@ -- // MIR for `bar` before ConstProp -+ // MIR for `bar` after ConstProp - - fn bar() -> () { - let mut _0: (); - let mut _1: (i32,); - let _2: (); - let mut _3: *mut i32; - let mut _5: i32; - scope 1 { - debug v => _1; - let _4: bool; - scope 2 { - } - scope 3 { - debug y => _4; - } - } - - bb0: { - StorageLive(_1); - _1 = (const 1_i32,); - StorageLive(_2); - StorageLive(_3); - _3 = &raw mut (_1.0: i32); - (*_3) = const 5_i32; - StorageDead(_3); - _2 = const (); - StorageDead(_2); - StorageLive(_4); - StorageLive(_5); - _5 = (_1.0: i32); - _4 = Eq(move _5, const 5_i32); - StorageDead(_5); - _0 = const (); - StorageDead(_4); - StorageDead(_1); - return; - } - } - diff --git a/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff b/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff deleted file mode 100644 index 445d9895d6a..00000000000 --- a/tests/mir-opt/const_prop_miscompile.foo.ConstProp.diff +++ /dev/null @@ -1,35 +0,0 @@ -- // MIR for `foo` before ConstProp -+ // MIR for `foo` after ConstProp - - fn foo() -> () { - let mut _0: (); - let mut _1: (i32,); - let mut _2: &mut i32; - let mut _4: i32; - scope 1 { - debug u => _1; - let _3: bool; - scope 2 { - debug y => _3; - } - } - - bb0: { - StorageLive(_1); - _1 = (const 1_i32,); - StorageLive(_2); - _2 = &mut (_1.0: i32); - (*_2) = const 5_i32; - StorageDead(_2); - StorageLive(_3); - StorageLive(_4); - _4 = (_1.0: i32); - _3 = Eq(move _4, const 5_i32); - StorageDead(_4); - _0 = const (); - StorageDead(_3); - StorageDead(_1); - return; - } - } - diff --git a/tests/mir-opt/const_prop_miscompile.rs b/tests/mir-opt/const_prop_miscompile.rs deleted file mode 100644 index 00696535ac1..00000000000 --- a/tests/mir-opt/const_prop_miscompile.rs +++ /dev/null @@ -1,24 +0,0 @@ -// skip-filecheck -// unit-test: ConstProp -#![feature(raw_ref_op)] - -// EMIT_MIR const_prop_miscompile.foo.ConstProp.diff -fn foo() { - let mut u = (1,); - *&mut u.0 = 5; - let y = { u.0 } == 5; -} - -// EMIT_MIR const_prop_miscompile.bar.ConstProp.diff -fn bar() { - let mut v = (1,); - unsafe { - *&raw mut v.0 = 5; - } - let y = { v.0 } == 5; -} - -fn main() { - foo(); - bar(); -} -- cgit 1.4.1-3-g733a5