diff --git a/include/llvm/MC/MCSymbolCOFF.h b/include/llvm/MC/MCSymbolCOFF.h index c7636e371dc..efa23de1817 100644 --- a/include/llvm/MC/MCSymbolCOFF.h +++ b/include/llvm/MC/MCSymbolCOFF.h @@ -15,15 +15,18 @@ namespace llvm { class MCSymbolCOFF : public MCSymbol { + /// This corresponds to the e_type field of the COFF symbol. + mutable uint16_t Type; + public: MCSymbolCOFF(const StringMapEntry *Name, bool isTemporary) - : MCSymbol(SymbolKindCOFF, Name, isTemporary) {} + : MCSymbol(SymbolKindCOFF, Name, isTemporary), Type(0) {} uint16_t getType() const { - return (getFlags() & COFF::SF_TypeMask) >> COFF::SF_TypeShift; + return Type; } - void setType(uint16_t Type) const { - modifyFlags(Type << COFF::SF_TypeShift, COFF::SF_TypeMask); + void setType(uint16_t Ty) const { + Type = Ty; } static bool classof(const MCSymbol *S) { return S->isCOFF(); } diff --git a/include/llvm/Support/COFF.h b/include/llvm/Support/COFF.h index c48370e53d1..fa210272f7e 100644 --- a/include/llvm/Support/COFF.h +++ b/include/llvm/Support/COFF.h @@ -155,15 +155,12 @@ namespace COFF { uint8_t NumberOfAuxSymbols; }; - enum SymbolFlags { - SF_TypeMask = 0x0000FFFF, - SF_TypeShift = 0, + enum SymbolFlags : uint16_t { + SF_ClassMask = 0x00FF, + SF_ClassShift = 0, - SF_ClassMask = 0x00FF0000, - SF_ClassShift = 16, - - SF_WeakExternal = 0x01000000, - SF_SafeSEH = 0x02000000, + SF_WeakExternal = 0x0100, + SF_SafeSEH = 0x0200, }; enum SymbolSectionNumber : int32_t {