From a316bc1a9bc4fb9d7f76fdaca2c76d94a58a54a8 Mon Sep 17 00:00:00 2001 From: David Thomas Date: Wed, 29 Nov 2023 10:48:09 +0000 Subject: [PATCH 1/2] Add support for impl mode structs to be repr(packed) --- src/public.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/public.rs b/src/public.rs index 967e0dac..6e45387b 100644 --- a/src/public.rs +++ b/src/public.rs @@ -321,7 +321,8 @@ macro_rules! __impl_public_bitflags_ops { &self, f: &mut $crate::__private::core::fmt::Formatter, ) -> $crate::__private::core::fmt::Result { - $crate::__private::core::fmt::Binary::fmt(&self.0, f) + let inner = self.0; + $crate::__private::core::fmt::Binary::fmt(&inner, f) } } @@ -330,7 +331,8 @@ macro_rules! __impl_public_bitflags_ops { &self, f: &mut $crate::__private::core::fmt::Formatter, ) -> $crate::__private::core::fmt::Result { - $crate::__private::core::fmt::Octal::fmt(&self.0, f) + let inner = self.0; + $crate::__private::core::fmt::Octal::fmt(&inner, f) } } @@ -339,7 +341,8 @@ macro_rules! __impl_public_bitflags_ops { &self, f: &mut $crate::__private::core::fmt::Formatter, ) -> $crate::__private::core::fmt::Result { - $crate::__private::core::fmt::LowerHex::fmt(&self.0, f) + let inner = self.0; + $crate::__private::core::fmt::LowerHex::fmt(&inner, f) } } @@ -348,7 +351,8 @@ macro_rules! __impl_public_bitflags_ops { &self, f: &mut $crate::__private::core::fmt::Formatter, ) -> $crate::__private::core::fmt::Result { - $crate::__private::core::fmt::UpperHex::fmt(&self.0, f) + let inner = self.0; + $crate::__private::core::fmt::UpperHex::fmt(&inner, f) } } From 843cc043ee66d6fd1a1795594ac193b84d6c7aee Mon Sep 17 00:00:00 2001 From: GnomedDev Date: Mon, 18 Dec 2023 20:42:49 +0000 Subject: [PATCH 2/2] Add compile-pass test --- tests/compile-pass/bitflags_impl_repr_packed.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/compile-pass/bitflags_impl_repr_packed.rs diff --git a/tests/compile-pass/bitflags_impl_repr_packed.rs b/tests/compile-pass/bitflags_impl_repr_packed.rs new file mode 100644 index 00000000..7d10799c --- /dev/null +++ b/tests/compile-pass/bitflags_impl_repr_packed.rs @@ -0,0 +1,13 @@ +extern crate bitflags; + +#[repr(packed)] +struct Example(u64); + +bitflags::bitflags! { + impl Example: u64 { + const FLAG_1 = 0b01; + const FLAG_2 = 0b10; + } +} + +fn main() {}