From e214e6db98badf837e95db89d7a9905294569cd6 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 20 Apr 2022 10:47:22 -0400 Subject: [PATCH] add mut_below_shr test --- tests/run-pass/stacked-borrows/stacked-borrows.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/run-pass/stacked-borrows/stacked-borrows.rs b/tests/run-pass/stacked-borrows/stacked-borrows.rs index 8aea945f9093..b63f9addb0f6 100644 --- a/tests/run-pass/stacked-borrows/stacked-borrows.rs +++ b/tests/run-pass/stacked-borrows/stacked-borrows.rs @@ -16,6 +16,7 @@ fn main() { disjoint_mutable_subborrows(); raw_ref_to_part(); array_casts(); + mut_below_shr(); } // Make sure that reading from an `&mut` does, like reborrowing to `&`, @@ -186,3 +187,12 @@ fn array_casts() { let p = &x as *const usize; assert_eq!(unsafe { *p.add(1) }, 1); } + +/// Transmuting &&i32 to &&mut i32 is fine. +fn mut_below_shr() { + let x = 0; + let y = &x; + let p = unsafe { core::mem::transmute::<&&i32,&&mut i32>(&y) }; + let r = &**p; + let _val = *r; +}