From 32f171fec4bd3ef10bb76ebe3e804c78bbe3aa8b Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 29 Dec 2016 01:14:41 +0000 Subject: [PATCH] Fix mingw build by moving the static const data member before the bitfields Apparently GCC targeting Windows breaks bitfields on static data members: struct Foo { unsigned X : 16; static const int M = 42; unsigned Y : 16; }; static_assert(sizeof(Foo) == 4, "asdf"); // fails Who knew. llvm-svn: 290700 --- llvm/include/llvm/IR/GlobalValue.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h index 403d1a7a61a6..c6398aaa4847 100644 --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -85,6 +85,9 @@ protected: } Type *ValueType; + + static const unsigned GlobalValueSubClassDataBits = 18; + // All bitfields use unsigned as the underlying type so that MSVC will pack // them. unsigned Linkage : 4; // The linkage of this global @@ -100,8 +103,6 @@ protected: /// Function::intrinsicID() returns Intrinsic::not_intrinsic. unsigned HasLLVMReservedName : 1; - static const unsigned GlobalValueSubClassDataBits = 18; - private: friend class Constant;