librustc_codegen_llvm: Use repr(transparent) for bitflags over repr(C) (#61306)
authorJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Sun, 16 Jun 2019 00:53:33 +0000 (02:53 +0200)
committerXimin Luo <infinity0@debian.org>
Thu, 18 Jul 2019 01:25:06 +0000 (02:25 +0100)
In order to make sure that Rust's bitflags types are passed the same
way in the Rust ABI as they are in the C ABI, we need to use the attribute
repr(transparent) over the repr(C) attribute for the single-field bitflags
structs in in order to prevent ABI mismatches. Thanks to Michael Karcher
for finding this bug.

Gbp-Pq: Name u-sparc64-ffi-abi.patch

src/librustc_codegen_llvm/llvm/ffi.rs

index f88923fc9f1c5dc54e94062c6e68f51363f288ad..ed824c1c1432bd3af529211587ca14bb39f78b92 100644 (file)
@@ -564,7 +564,7 @@ pub mod debuginfo {
 
     // These values **must** match with LLVMRustDIFlags!!
     bitflags! {
-        #[repr(C)]
+        #[repr(transparent)]
         #[derive(Default)]
         pub struct DIFlags: ::libc::uint32_t {
             const FlagZero                = 0;
@@ -593,7 +593,7 @@ pub mod debuginfo {
 
     // These values **must** match with LLVMRustDISPFlags!!
     bitflags! {
-        #[repr(C)]
+        #[repr(transparent)]
         #[derive(Default)]
         pub struct DISPFlags: ::libc::uint32_t {
             const SPFlagZero              = 0;