From dbb0802eb6929814c5a83b7ea6635116bf010da4 Mon Sep 17 00:00:00 2001 From: Pete Cooper Date: Tue, 9 Jun 2015 22:35:55 +0000 Subject: [PATCH] Revert "Move MCSymbol Value in to the union of Offset and CommonSize." This reverts commit 2e449ec5bcdf67b52b315b16c2128aaf25d5b73c. This was svn r239440. Its currently failing an ARM test so reverting while I work out what to do next. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239441 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCSymbol.h | 48 ++++++++++---------------------------- lib/MC/MCSymbol.cpp | 4 ---- 2 files changed, 12 insertions(+), 40 deletions(-) diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index 8bf949a26ef..78b7c516e83 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -65,6 +65,9 @@ protected: /// relative to, if any. mutable PointerUnion SectionOrFragment; + /// Value - If non-null, the value for a variable symbol. + const MCExpr *Value; + /// IsTemporary - True if this is an assembler temporary label, which /// typically does not survive in the .o file's symbol table. Usually /// "Lfoo" or ".foo". @@ -93,17 +96,6 @@ protected: /// unsigned to avoid sign extension and achieve better bitpacking with MSVC. unsigned Kind : 2; - /// A symbol can contain an Offset, or Value, or be Common, but never more - /// than one of these. - enum Contents : uint8_t { - SymContentsUnset, - SymContentsOffset, - SymContentsVariable, - SymContentsCommon, - }; - - Contents SymbolContents : 2; - /// Index field, for use by the object file implementation. mutable uint32_t Index = 0; @@ -113,9 +105,6 @@ protected: /// The size of the symbol, if it is 'common'. uint64_t CommonSize; - - /// If non-null, the value for a variable symbol. - const MCExpr *Value; }; /// The alignment of the symbol, if it is 'common', or -1. @@ -141,10 +130,10 @@ protected: // MCContext creates and uniques these. } NameEntryStorageTy; MCSymbol(SymbolKind Kind, const StringMapEntry *Name, bool isTemporary) - : IsTemporary(isTemporary), + : Value(nullptr), IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false), IsRegistered(false), IsExternal(false), IsPrivateExtern(false), HasName(!!Name), - Kind(Kind), SymbolContents(SymContentsUnset) { + Kind(Kind) { Offset = 0; if (Name) getNameEntryPtr() = Name; @@ -174,9 +163,9 @@ private: return F->getParent(); assert(!SectionOrFragment.is() && "Section or null expected"); MCSection *Section = SectionOrFragment.dyn_cast(); - if (Section || !isVariable()) + if (Section || !Value) return Section; - return Section = getVariableValue()->findAssociatedSection(); + return Section = Value->findAssociatedSection(); } /// \brief Get a reference to the name field. Requires that we have a name @@ -218,10 +207,7 @@ public: /// \brief Prepare this symbol to be redefined. void redefineIfPossible() { if (IsRedefinable) { - if (SymbolContents == SymContentsVariable) { - Value = nullptr; - SymbolContents = SymContentsUnset; - } + Value = nullptr; SectionOrFragment = nullptr; IsRedefinable = false; } @@ -275,9 +261,7 @@ public: /// @{ /// isVariable - Check if this is a variable symbol. - bool isVariable() const { - return SymbolContents == SymContentsVariable; - } + bool isVariable() const { return Value != nullptr; } /// getVariableValue() - Get the value for variable symbols. const MCExpr *getVariableValue() const { @@ -301,17 +285,12 @@ public: } uint64_t getOffset() const { - assert((SymbolContents == SymContentsUnset || - SymbolContents == SymContentsOffset) && - "Cannot get offset for a common/variable symbol"); + assert(!isCommon()); return Offset; } void setOffset(uint64_t Value) { - assert((SymbolContents == SymContentsUnset || - SymbolContents == SymContentsOffset) && - "Cannot set offset for a common/variable symbol"); + assert(!isCommon()); Offset = Value; - SymbolContents = SymContentsOffset; } /// Return the size of a 'common' symbol. @@ -328,7 +307,6 @@ public: assert(getOffset() == 0); CommonSize = Size; CommonAlign = Align; - SymbolContents = SymContentsCommon; } /// Return the alignment of a 'common' symbol. @@ -353,9 +331,7 @@ public: } /// Is this a 'common' symbol. - bool isCommon() const { - return SymbolContents == SymContentsCommon; - } + bool isCommon() const { return CommonAlign != -1U; } MCFragment *getFragment() const { return SectionOrFragment.dyn_cast(); diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp index 9ca85b08416..836d28294f5 100644 --- a/lib/MC/MCSymbol.cpp +++ b/lib/MC/MCSymbol.cpp @@ -40,11 +40,7 @@ void *MCSymbol::operator new(size_t s, const StringMapEntry *Name, void MCSymbol::setVariableValue(const MCExpr *Value) { assert(!IsUsed && "Cannot set a variable that has already been used."); assert(Value && "Invalid variable value!"); - assert((SymbolContents == SymContentsUnset || - SymbolContents == SymContentsVariable) && - "Cannot give common/offset symbol a variable value"); this->Value = Value; - SymbolContents = SymContentsVariable; SectionOrFragment = nullptr; } -- 2.34.1