From e6b7482c3a265cbe72b3602f646b216e29a15bad Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Mon, 3 Jun 2019 22:02:48 +0000 Subject: [PATCH] [ORC] Use uint8_t for bitfields in SymbolTableEntry. This allows for better struct packing on MSVC, and as a bonus will eliminate a warning on GCC builds. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362450 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ExecutionEngine/Orc/Core.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/include/llvm/ExecutionEngine/Orc/Core.h b/include/llvm/ExecutionEngine/Orc/Core.h index 6a913e85fcb..45bcb9460f8 100644 --- a/include/llvm/ExecutionEngine/Orc/Core.h +++ b/include/llvm/ExecutionEngine/Orc/Core.h @@ -653,16 +653,16 @@ private: public: SymbolTableEntry() = default; SymbolTableEntry(JITSymbolFlags Flags) - : Flags(Flags), State(SymbolState::NeverSearched), + : Flags(Flags), State(static_cast(SymbolState::NeverSearched)), MaterializerAttached(false), PendingRemoval(false) {} JITTargetAddress getAddress() const { return Addr; } JITSymbolFlags getFlags() const { return Flags; } - SymbolState getState() const { return State; } + SymbolState getState() const { return static_cast(State); } bool isInMaterializationPhase() const { - return State == SymbolState::Materializing || - State == SymbolState::Resolved; + return getState() == SymbolState::Materializing || + getState() == SymbolState::Resolved; } bool hasMaterializerAttached() const { return MaterializerAttached; } @@ -670,7 +670,11 @@ private: void setAddress(JITTargetAddress Addr) { this->Addr = Addr; } void setFlags(JITSymbolFlags Flags) { this->Flags = Flags; } - void setState(SymbolState State) { this->State = State; } + void setState(SymbolState State) { + assert(static_cast(State) < (1 << 6) && + "State does not fit in bitfield"); + this->State = static_cast(State); + } void setMaterializerAttached(bool MaterializerAttached) { this->MaterializerAttached = MaterializerAttached; @@ -687,9 +691,9 @@ private: private: JITTargetAddress Addr = 0; JITSymbolFlags Flags; - SymbolState State : 6; - bool MaterializerAttached : 1; - bool PendingRemoval : 1; + uint8_t State : 6; + uint8_t MaterializerAttached : 1; + uint8_t PendingRemoval : 1; }; using SymbolTable = DenseMap; -- 2.11.0