From 158ebfb3b40fe2010091a31fcd68fbeec95e4fe9 Mon Sep 17 00:00:00 2001 From: nils <48135649+Nilstrieb@users.noreply.github.com> Date: Tue, 30 May 2023 15:36:16 +0200 Subject: [PATCH] more --- .gitignore | 6 +++++ Cargo.lock | 7 +++++ Cargo.toml | 12 +++++++++ check.sh | 13 +++++++++ code.rs | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100755 check.sh create mode 100644 code.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..269f5a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/good +/bad + +# Added by cargo + +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..267eaff --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "min112061" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..21023ee --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "min112061" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[[bin]] +name = "code" +path = "./code.rs" + +[dependencies] diff --git a/check.sh b/check.sh new file mode 100755 index 0000000..6b4eb17 --- /dev/null +++ b/check.sh @@ -0,0 +1,13 @@ +#/usr/bin/env bash + +rustc code.rs --crate-name bad -Zmir-enable-passes=-ConstProp +rustc code.rs --crate-name good -Zmir-enable-passes=+ConstProp + +bad=$(./bad) +good=$(./good) + +if [ good != bad ]; then + echo "MISCOMPILATION" +else + echo "no repro" +fi \ No newline at end of file diff --git a/code.rs b/code.rs new file mode 100644 index 0000000..a766324 --- /dev/null +++ b/code.rs @@ -0,0 +1,79 @@ +use std::ptr; +pub fn print_var(v: u8) { + println!("{v}"); +} +pub unsafe fn fn12_rs() -> ([u128; 7], *mut i8, *mut bool) { + let mut v2: bool = false; + let mut v8: u64 = 0; + let mut v9: usize = 0; + let mut v12: *mut u8 = ptr::null_mut(); + let mut v17: *mut bool = ptr::null_mut(); + let mut v20: [u8; 8] = Default::default(); + let mut v21: [u8; 8] = Default::default(); + let mut v31: (bool, u8, usize, f32) = Default::default(); + let mut v33: ([u128; 7], *mut i8, *mut bool) = ([0; 7], ptr::null_mut(), ptr::null_mut()); + let mut v39: (usize, [u128; 7], ([u32; 6], usize, *mut [u32; 6]), [u32; 2]) = + (0, [0; 7], ([0; 6], 0, ptr::null_mut()), [0; 2]); + let mut ret: ([u128; 7], *mut i8, *mut bool) = ([0; 7], ptr::null_mut(), ptr::null_mut()); + ret.2 = core::ptr::addr_of_mut!(v2); + 'l0: loop { + v20 = [197_u8; 8]; + let v20_ptr = ptr::addr_of_mut!(v20); + v12 = core::ptr::addr_of_mut!((*v20_ptr)[v9]); + v9 = 2_usize; + 'l1: loop { + match *v12 { + 197 => { + // Taken + v8 = 13978819448286864680_u64; + v33.2 = ret.2; + match v39.0 { + 0 => { + // Taken + 'l2: loop { + (*v20_ptr) = [11_u8; 8]; // What LLVM with low mir-opt prints + (*v12) = 22; // What Miri prints + 'l3: loop { + v21 = *v20_ptr; + match v8 { + 13978819448286864680 => { + // Taken + v39.2 .0 = [2262110980_u32; 6]; + v8 = 2; + v39.0 = 6; + v17 = v33.2; + v33.2 = core::ptr::addr_of_mut!(v31.0); + v31.1 = *v12; + (*v17) = true; + (*v20_ptr) = v21; + match v39.0 { + 6 => { + // Taken + print_var(v31.1); + } + 0 => continue 'l2, + _ => return ret, + } + } + 2 => return ret, + _ => continue 'l0, + } + } + } + } + _ => return ret, + } + } + 4 => { + v12 = core::ptr::addr_of_mut!((*v20_ptr)[v9]); + } + _ => return ret, + } + } + } +} +pub fn main() { + unsafe { + fn12_rs(); + } +} \ No newline at end of file