From 53114e3b36942138d4f9dd575f61e5493bc578f6 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 5 Jun 2018 10:21:28 +0200 Subject: [PATCH 1/5] Update to rustc sanity check branch --- src/intrinsic.rs | 3 ++- src/validation.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/intrinsic.rs b/src/intrinsic.rs index cee2f1ab76..6c8fd0af40 100644 --- a/src/intrinsic.rs +++ b/src/intrinsic.rs @@ -245,10 +245,11 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super: "discriminant_value" => { let ty = substs.type_at(0); + let layout = self.layout_of(ty)?; let adt_ptr = self.into_ptr(args[0].value)?; let adt_align = self.layout_of(args[0].ty)?.align; let place = Place::from_scalar_ptr(adt_ptr, adt_align); - let discr_val = self.read_discriminant_value(place, ty)?; + let discr_val = self.read_discriminant_value(place, layout)?; self.write_scalar(dest, Scalar::from_u128(discr_val), dest_layout.ty)?; } diff --git a/src/validation.rs b/src/validation.rs index 758fd5d274..caa5b702e6 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -765,7 +765,8 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx> for EvalContext<'a, 'mir, ' match adt.adt_kind() { AdtKind::Enum => { - let variant_idx = self.read_discriminant_as_variant_index(query.place.1, query.ty)?; + let layout = self.layout_of(query.ty)?; + let variant_idx = self.read_discriminant_as_variant_index(query.place.1, layout)?; let variant = &adt.variants[variant_idx]; if !variant.fields.is_empty() { From e849fa47fb121caa30b408e84cf28a7d078f542b Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 24 Jul 2018 22:20:50 +0200 Subject: [PATCH 2/5] make miri compile again --- src/intrinsic.rs | 2 +- src/validation.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/intrinsic.rs b/src/intrinsic.rs index 6c8fd0af40..dc2224c4ce 100644 --- a/src/intrinsic.rs +++ b/src/intrinsic.rs @@ -344,7 +344,7 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super: ty::layout::Abi::Scalar(_) => Value::Scalar(Scalar::null()), _ => { // FIXME(oli-obk): pass TyLayout to alloc_ptr instead of Ty - let ptr = this.alloc_ptr(dest_layout.ty)?; + let ptr = this.alloc_ptr(dest_layout)?; let ptr = Scalar::Ptr(ptr); this.memory.write_repeat(ptr, 0, size)?; Value::ByRef(ptr, dest_layout.align) diff --git a/src/validation.rs b/src/validation.rs index caa5b702e6..676718ad7f 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -140,6 +140,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx> for EvalContext<'a, 'mir, ' mir::Place::Static(ref s) => AbsPlace::Static(s.def_id), mir::Place::Projection(ref p) => AbsPlace::Projection(Box::new(self.abstract_place_projection(&*p)?)), + _ => unimplemented!("validation is not currently maintained"), }) } From b7c57fee610f8128b454e22898371167287b0ddc Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 24 Jul 2018 22:29:08 +0200 Subject: [PATCH 3/5] Ignore tests the bool thing will be fixed by the validation I have planned, and we already ignored another test around modifing constants. --- tests/compile-fail/invalid_bool.rs | 2 ++ tests/compile-fail/modifying_constants.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/compile-fail/invalid_bool.rs b/tests/compile-fail/invalid_bool.rs index 1aa5d9bf77..6ac7f3e60c 100644 --- a/tests/compile-fail/invalid_bool.rs +++ b/tests/compile-fail/invalid_bool.rs @@ -1,3 +1,5 @@ +//ignore-test FIXME (do some basic validation of invariants for all values in flight) + fn main() { let b = unsafe { std::mem::transmute::(2) }; if b { unreachable!() } else { unreachable!() } //~ ERROR constant evaluation error diff --git a/tests/compile-fail/modifying_constants.rs b/tests/compile-fail/modifying_constants.rs index c10657ae75..6ffba89fa5 100644 --- a/tests/compile-fail/modifying_constants.rs +++ b/tests/compile-fail/modifying_constants.rs @@ -1,3 +1,5 @@ +// ignore-test FIXME: we are not making these statics read-only any more? + fn main() { let x = &1; // the `&1` is promoted to a constant, but it used to be that only the pointer is marked static, not the pointee let y = unsafe { &mut *(x as *const i32 as *mut i32) }; From 305d8aeafe4ab53d7809ec6a1b9227166bd4fa63 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Wed, 25 Jul 2018 15:48:20 +0200 Subject: [PATCH 4/5] Disable blood letting edge features --- Cargo.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 417d76c54c..c46ba7c414 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,3 @@ -cargo-features = ["default-run"] - [package] authors = ["Scott Olson "] description = "An experimental interpreter for Rust MIR." @@ -8,7 +6,6 @@ name = "miri" repository = "https://github.com/solson/miri" version = "0.1.0" build = "build.rs" -default-run = "miri" [[bin]] doc = false From e6f1e15676c26fdc7c4713647fe007b26f361a8e Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Thu, 26 Jul 2018 14:37:43 +0200 Subject: [PATCH 5/5] Bump min dependency version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c46ba7c414..07ebca6491 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,5 +30,5 @@ log = "0.4" cargo_miri = ["cargo_metadata"] [dev-dependencies] -compiletest_rs = { version = "0.3.4", features = ["tmp"] } +compiletest_rs = { version = "0.3.12", features = ["tmp"] } colored = "1.6"