From 3fa7411050e5f712c28b6e97346e9da3833407bb Mon Sep 17 00:00:00 2001 From: John Paul Adrian Glaubitz Date: Sun, 16 Jun 2019 02:53:33 +0200 Subject: [PATCH] librustc_codegen_llvm: Use repr(transparent) for bitflags over repr(C) (#61306) 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. --- src/librustc_codegen_llvm/llvm/ffi.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs index a71243c7c826b..a5c295cd4525c 100644 --- a/src/librustc_codegen_llvm/llvm/ffi.rs +++ b/src/librustc_codegen_llvm/llvm/ffi.rs @@ -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;