From c03b44dbebb6588734ab1bbf48f48dd1c5df6ba9 Mon Sep 17 00:00:00 2001 From: Lucian Popescu Date: Thu, 5 Nov 2026 14:36:25 +0000 Subject: [PATCH 1/2] Shift std::byte on the promoted unsigned int --- rules/cstddef/tgt_unsafe.rs | 16 ++++++++-------- tests/unit/byte.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/rules/cstddef/tgt_unsafe.rs b/rules/cstddef/tgt_unsafe.rs index 8b58d3acb3..c83c8a3d39 100644 --- a/rules/cstddef/tgt_unsafe.rs +++ b/rules/cstddef/tgt_unsafe.rs @@ -30,28 +30,28 @@ fn t9() -> usize { } fn f1(a0: &mut u8, a1: u32) -> u8 { - *a0 << a1 + ((*a0 as u32) << a1) as u8 } fn f2(a0: &mut u8, a1: u32) -> u8 { - *a0 >> a1 + ((*a0 as u32) >> a1) as u8 } fn f3(a0: &mut u8, a1: u32) -> u8 { - let n_ = *a0 << a1; - *a0 = n_; + let __n = ((*a0 as u32) << a1) as u8; + *a0 = __n; *a0 } fn f4(a0: &mut u8, a1: u32) -> u8 { - let n_ = *a0 >> a1; - *a0 = n_; + let __n = ((*a0 as u32) >> a1) as u8; + *a0 = __n; *a0 } fn f5(a0: u8, a1: T1) -> u8 where - u8: ::std::ops::Shl, + u32: ::std::ops::Shl, { - a0 << a1 + ((a0 as u32) << a1) as u8 } diff --git a/tests/unit/byte.cpp b/tests/unit/byte.cpp index b308b937e3..c12b5d8fcb 100644 --- a/tests/unit/byte.cpp +++ b/tests/unit/byte.cpp @@ -23,5 +23,32 @@ int main() { int ishift = 1; std::byte shl2 = b1 << ishift; assert(shl2 == std::byte(0x08)); + + std::byte b2{0x81}; + unsigned ushift5 = 8; + std::byte shl3 = b2 << ushift5; + assert(shl3 == std::byte(0x00)); + + unsigned ushift6 = 9; + std::byte shr2 = b2 >> ushift6; + assert(shr2 == std::byte(0x00)); + + unsigned ushift7 = 9; + b2 <<= ushift7; + assert(b2 == std::byte(0x00)); + + std::byte b3{0x81}; + unsigned ushift8 = 8; + b3 >>= ushift8; + assert(b3 == std::byte(0x00)); + + std::byte b4{0xff}; + int ishift2 = 12; + std::byte shl4 = b4 << ishift2; + assert(shl4 == std::byte(0x00)); + + unsigned long lshift = 10; + std::byte shl5 = b4 << lshift; + assert(shl5 == std::byte(0x00)); return 0; } From 8f33af53c251eddfd38c6f4321c05555a11c29fb Mon Sep 17 00:00:00 2001 From: Lucian Popescu Date: Thu, 5 Nov 2026 15:08:54 +0000 Subject: [PATCH 2/2] Update tests --- tests/unit/out/refcount/byte.rs | 43 +++++++++++++++++++++++++++------ tests/unit/out/unsafe/byte.rs | 43 +++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 14 deletions(-) diff --git a/tests/unit/out/refcount/byte.rs b/tests/unit/out/refcount/byte.rs index d4ce70a8a9..36cc68bd03 100644 --- a/tests/unit/out/refcount/byte.rs +++ b/tests/unit/out/refcount/byte.rs @@ -13,28 +13,57 @@ pub fn main() { fn main_0() -> i32 { let mut b1: u8 = 1_u8; let mut ushift1: u32 = 3_u32; - let mut shl1: u8 = b1 << ushift1; + let mut shl1: u8 = ((b1 as u32) << ushift1) as u8; assert!((shl1 == ((8) as u8))); let mut ushift2: u32 = 2_u32; - let mut shr1: u8 = shl1 >> ushift2; + let mut shr1: u8 = ((shl1 as u32) >> ushift2) as u8; assert!((shr1 == ((2) as u8))); let mut ushift3: u32 = 5_u32; { - let n_ = b1 << ushift3; - b1 = n_; + let __n = ((b1 as u32) << ushift3) as u8; + b1 = __n; b1 }; assert!((b1 == ((32) as u8))); let mut ushift4: u32 = 3_u32; { - let n_ = b1 >> ushift4; - b1 = n_; + let __n = ((b1 as u32) >> ushift4) as u8; + b1 = __n; b1 }; assert!((b1 == ((4) as u8))); let mut ishift: i32 = 1; - let mut shl2: u8 = b1 << ishift; + let mut shl2: u8 = ((b1 as u32) << ishift) as u8; assert!((shl2 == ((8) as u8))); + let mut b2: u8 = 129_u8; + let mut ushift5: u32 = 8_u32; + let mut shl3: u8 = ((b2 as u32) << ushift5) as u8; + assert!((shl3 == ((0) as u8))); + let mut ushift6: u32 = 9_u32; + let mut shr2: u8 = ((b2 as u32) >> ushift6) as u8; + assert!((shr2 == ((0) as u8))); + let mut ushift7: u32 = 9_u32; + { + let __n = ((b2 as u32) << ushift7) as u8; + b2 = __n; + b2 + }; + assert!((b2 == ((0) as u8))); + let mut b3: u8 = 129_u8; + let mut ushift8: u32 = 8_u32; + { + let __n = ((b3 as u32) >> ushift8) as u8; + b3 = __n; + b3 + }; + assert!((b3 == ((0) as u8))); + let mut b4: u8 = 255_u8; + let mut ishift2: i32 = 12; + let mut shl4: u8 = ((b4 as u32) << ishift2) as u8; + assert!((shl4 == ((0) as u8))); + let mut lshift: u64 = 10_u64; + let mut shl5: u8 = ((b4 as u32) << lshift) as u8; + assert!((shl5 == ((0) as u8))); return 0; } pub fn __cpp2rust_init_globals() {} diff --git a/tests/unit/out/unsafe/byte.rs b/tests/unit/out/unsafe/byte.rs index dced97ec27..34ee4ca8bb 100644 --- a/tests/unit/out/unsafe/byte.rs +++ b/tests/unit/out/unsafe/byte.rs @@ -15,28 +15,57 @@ pub fn main() { unsafe fn main_0() -> i32 { let mut b1: u8 = 1_u8; let mut ushift1: u32 = 3_u32; - let mut shl1: u8 = b1 << ushift1; + let mut shl1: u8 = ((b1 as u32) << ushift1) as u8; assert!(((shl1) == ((8) as u8))); let mut ushift2: u32 = 2_u32; - let mut shr1: u8 = shl1 >> ushift2; + let mut shr1: u8 = ((shl1 as u32) >> ushift2) as u8; assert!(((shr1) == ((2) as u8))); let mut ushift3: u32 = 5_u32; { - let n_ = b1 << ushift3; - b1 = n_; + let __n = ((b1 as u32) << ushift3) as u8; + b1 = __n; b1 }; assert!(((b1) == ((32) as u8))); let mut ushift4: u32 = 3_u32; { - let n_ = b1 >> ushift4; - b1 = n_; + let __n = ((b1 as u32) >> ushift4) as u8; + b1 = __n; b1 }; assert!(((b1) == ((4) as u8))); let mut ishift: i32 = 1; - let mut shl2: u8 = b1 << ishift; + let mut shl2: u8 = ((b1 as u32) << ishift) as u8; assert!(((shl2) == ((8) as u8))); + let mut b2: u8 = 129_u8; + let mut ushift5: u32 = 8_u32; + let mut shl3: u8 = ((b2 as u32) << ushift5) as u8; + assert!(((shl3) == ((0) as u8))); + let mut ushift6: u32 = 9_u32; + let mut shr2: u8 = ((b2 as u32) >> ushift6) as u8; + assert!(((shr2) == ((0) as u8))); + let mut ushift7: u32 = 9_u32; + { + let __n = ((b2 as u32) << ushift7) as u8; + b2 = __n; + b2 + }; + assert!(((b2) == ((0) as u8))); + let mut b3: u8 = 129_u8; + let mut ushift8: u32 = 8_u32; + { + let __n = ((b3 as u32) >> ushift8) as u8; + b3 = __n; + b3 + }; + assert!(((b3) == ((0) as u8))); + let mut b4: u8 = 255_u8; + let mut ishift2: i32 = 12; + let mut shl4: u8 = ((b4 as u32) << ishift2) as u8; + assert!(((shl4) == ((0) as u8))); + let mut lshift: u64 = 10_u64; + let mut shl5: u8 = ((b4 as u32) << lshift) as u8; + assert!(((shl5) == ((0) as u8))); return 0; } pub unsafe fn __cpp2rust_init_globals() {}