diff options
author | Fangrui Song <i@maskray.me> | 2025-08-03 16:45:31 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2025-08-03 16:45:31 -0700 |
commit | 45a061b8c81837d8283bcf4ad79df7d0f60b19a5 (patch) | |
tree | 25d3d18b3c26cb27d2fbeccb4b8e8e51e8837258 /llvm | |
parent | 441fff7ebe6bad3502da368236885f76cf9e5f30 (diff) | |
download | llvm-45a061b8c81837d8283bcf4ad79df7d0f60b19a5.zip llvm-45a061b8c81837d8283bcf4ad79df7d0f60b19a5.tar.gz llvm-45a061b8c81837d8283bcf4ad79df7d0f60b19a5.tar.bz2 |
MCSymbolCOFF: Remove classof
The object file format specific derived classes are used in context
where the type is statically known. We don't use isa/dyn_cast and we
want to eliminate MCSymbol::Kind in the base class.
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/MC/MCSymbolCOFF.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCWinCOFFStreamer.h | 2 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/COFFMasmParser.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/MC/MCWinCOFFStreamer.cpp | 21 | ||||
-rw-r--r-- | llvm/lib/MC/WinCOFFObjectWriter.cpp | 13 |
5 files changed, 21 insertions, 20 deletions
diff --git a/llvm/include/llvm/MC/MCSymbolCOFF.h b/llvm/include/llvm/MC/MCSymbolCOFF.h index 2964c52..3b90e7c 100644 --- a/llvm/include/llvm/MC/MCSymbolCOFF.h +++ b/llvm/include/llvm/MC/MCSymbolCOFF.h @@ -65,8 +65,6 @@ public: void setIsSafeSEH() const { modifyFlags(SF_SafeSEH, SF_SafeSEH); } - - static bool classof(const MCSymbol *S) { return S->isCOFF(); } }; } // end namespace llvm diff --git a/llvm/include/llvm/MC/MCWinCOFFStreamer.h b/llvm/include/llvm/MC/MCWinCOFFStreamer.h index 05def07..45849b9 100644 --- a/llvm/include/llvm/MC/MCWinCOFFStreamer.h +++ b/llvm/include/llvm/MC/MCWinCOFFStreamer.h @@ -72,7 +72,7 @@ public: /// \} protected: - const MCSymbol *CurSymbol; + MCSymbol *CurSymbol; void finalizeCGProfileEntry(const MCSymbolRefExpr *&S); diff --git a/llvm/lib/MC/MCParser/COFFMasmParser.cpp b/llvm/lib/MC/MCParser/COFFMasmParser.cpp index 282f22f..229b0b8 100644 --- a/llvm/lib/MC/MCParser/COFFMasmParser.cpp +++ b/llvm/lib/MC/MCParser/COFFMasmParser.cpp @@ -460,7 +460,8 @@ bool COFFMasmParser::parseDirectiveProc(StringRef Directive, SMLoc Loc) { nextLoc = getTok().getLoc(); } } - MCSymbolCOFF *Sym = cast<MCSymbolCOFF>(getContext().getOrCreateSymbol(Label)); + auto *Sym = + static_cast<MCSymbolCOFF *>(getContext().getOrCreateSymbol(Label)); // Define symbol as simple external function Sym->setExternal(true); diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp index b69c210..a45936b 100644 --- a/llvm/lib/MC/MCWinCOFFStreamer.cpp +++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp @@ -163,13 +163,13 @@ void MCWinCOFFStreamer::changeSection(MCSection *Section, uint32_t Subsection) { } void MCWinCOFFStreamer::emitLabel(MCSymbol *S, SMLoc Loc) { - auto *Symbol = cast<MCSymbolCOFF>(S); + auto *Symbol = static_cast<MCSymbolCOFF *>(S); MCObjectStreamer::emitLabel(Symbol, Loc); } bool MCWinCOFFStreamer::emitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) { - auto *Symbol = cast<MCSymbolCOFF>(S); + auto *Symbol = static_cast<MCSymbolCOFF *>(S); getAssembler().registerSymbol(*Symbol); switch (Attribute) { @@ -199,11 +199,10 @@ void MCWinCOFFStreamer::emitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) { } void MCWinCOFFStreamer::beginCOFFSymbolDef(MCSymbol const *S) { - auto *Symbol = cast<MCSymbolCOFF>(S); if (CurSymbol) Error("starting a new symbol definition without completing the " "previous one"); - CurSymbol = Symbol; + CurSymbol = static_cast<MCSymbolCOFF *>(const_cast<MCSymbol *>(S)); } void MCWinCOFFStreamer::emitCOFFSymbolStorageClass(int StorageClass) { @@ -219,7 +218,7 @@ void MCWinCOFFStreamer::emitCOFFSymbolStorageClass(int StorageClass) { } getAssembler().registerSymbol(*CurSymbol); - cast<MCSymbolCOFF>(CurSymbol)->setClass((uint16_t)StorageClass); + static_cast<MCSymbolCOFF *>(CurSymbol)->setClass((uint16_t)StorageClass); } void MCWinCOFFStreamer::emitCOFFSymbolType(int Type) { @@ -234,7 +233,7 @@ void MCWinCOFFStreamer::emitCOFFSymbolType(int Type) { } getAssembler().registerSymbol(*CurSymbol); - cast<MCSymbolCOFF>(CurSymbol)->setType((uint16_t)Type); + static_cast<const MCSymbolCOFF *>(CurSymbol)->setType((uint16_t)Type); } void MCWinCOFFStreamer::endCOFFSymbolDef() { @@ -249,7 +248,7 @@ void MCWinCOFFStreamer::emitCOFFSafeSEH(MCSymbol const *Symbol) { if (getContext().getTargetTriple().getArch() != Triple::x86) return; - const MCSymbolCOFF *CSymbol = cast<MCSymbolCOFF>(Symbol); + auto *CSymbol = static_cast<const MCSymbolCOFF *>(Symbol); if (CSymbol->isSafeSEH()) return; @@ -340,7 +339,7 @@ void MCWinCOFFStreamer::emitCOFFSecOffset(MCSymbol const *Symbol) { void MCWinCOFFStreamer::emitCommonSymbol(MCSymbol *S, uint64_t Size, Align ByteAlignment) { - auto *Symbol = cast<MCSymbolCOFF>(S); + auto *Symbol = static_cast<MCSymbolCOFF *>(S); const Triple &T = getContext().getTargetTriple(); if (T.isWindowsMSVCEnvironment()) { @@ -372,7 +371,7 @@ void MCWinCOFFStreamer::emitCommonSymbol(MCSymbol *S, uint64_t Size, void MCWinCOFFStreamer::emitLocalCommonSymbol(MCSymbol *S, uint64_t Size, Align ByteAlignment) { - auto *Symbol = cast<MCSymbolCOFF>(S); + auto *Symbol = static_cast<MCSymbolCOFF *>(S); MCSection *Section = getContext().getObjectFileInfo()->getBSSSection(); pushSection(); @@ -387,7 +386,7 @@ void MCWinCOFFStreamer::emitLocalCommonSymbol(MCSymbol *S, uint64_t Size, // Hack: Used by llvm-ml to implement the alias directive. void MCWinCOFFStreamer::emitWeakReference(MCSymbol *AliasS, const MCSymbol *Symbol) { - auto *Alias = cast<MCSymbolCOFF>(AliasS); + auto *Alias = static_cast<MCSymbolCOFF *>(AliasS); emitSymbolAttribute(Alias, MCSA_Weak); Alias->setIsWeakExternal(true); @@ -415,7 +414,7 @@ void MCWinCOFFStreamer::emitCGProfileEntry(const MCSymbolRefExpr *From, void MCWinCOFFStreamer::finalizeCGProfileEntry(const MCSymbolRefExpr *&SRE) { const MCSymbol *S = &SRE->getSymbol(); if (getAssembler().registerSymbol(*S)) - cast<MCSymbolCOFF>(S)->setExternal(true); + static_cast<const MCSymbolCOFF *>(S)->setExternal(true); } void MCWinCOFFStreamer::finishImpl() { diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp index 856850d..0cc5ff5 100644 --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -382,7 +382,8 @@ void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) { COFFSymbol *Sym = GetOrCreateCOFFSymbol(&MCSym); COFFSymbol *Local = nullptr; - if (cast<MCSymbolCOFF>(MCSym).getWeakExternalCharacteristics()) { + if (static_cast<const MCSymbolCOFF &>(MCSym) + .getWeakExternalCharacteristics()) { Sym->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL; Sym->Section = nullptr; @@ -406,7 +407,8 @@ void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) { Sym->Aux[0].AuxType = ATWeakExternal; Sym->Aux[0].Aux.WeakExternal.TagIndex = 0; // Filled in later Sym->Aux[0].Aux.WeakExternal.Characteristics = - cast<MCSymbolCOFF>(MCSym).getWeakExternalCharacteristics(); + static_cast<const MCSymbolCOFF &>(MCSym) + .getWeakExternalCharacteristics(); } else { if (!Base) Sym->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE; @@ -418,7 +420,7 @@ void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) { if (Local) { Local->Data.Value = getSymbolValue(MCSym, *Asm); - const MCSymbolCOFF &SymbolCOFF = cast<MCSymbolCOFF>(MCSym); + auto &SymbolCOFF = static_cast<const MCSymbolCOFF &>(MCSym); Local->Data.Type = SymbolCOFF.getType(); Local->Data.StorageClass = SymbolCOFF.getClass(); @@ -821,7 +823,8 @@ void WinCOFFWriter::executePostLayoutBinding() { for (const MCSymbol &Symbol : Asm->symbols()) // Define non-temporary or temporary static (private-linkage) symbols if (!Symbol.isTemporary() || - cast<MCSymbolCOFF>(Symbol).getClass() == COFF::IMAGE_SYM_CLASS_STATIC) + static_cast<const MCSymbolCOFF &>(Symbol).getClass() == + COFF::IMAGE_SYM_CLASS_STATIC) defineSymbol(Symbol); UseBigObj = Sections.size() > COFF::MaxNumberOfSections16; @@ -1188,7 +1191,7 @@ bool WinCOFFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl( // point to thunks, and the /GUARD:CF flag assumes that it can use relocations // to approximate the set of all address taken functions. LLD's implementation // of /GUARD:CF also relies on the existance of these relocations. - uint16_t Type = cast<MCSymbolCOFF>(SymA).getType(); + uint16_t Type = static_cast<const MCSymbolCOFF &>(SymA).getType(); if ((Type >> COFF::SCT_COMPLEX_TYPE_SHIFT) == COFF::IMAGE_SYM_DTYPE_FUNCTION) return false; return &SymA.getSection() == FB.getParent(); |