[llvm] 45a061b - MCSymbolCOFF: Remove classof
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 3 16:45:36 PDT 2025
Author: Fangrui Song
Date: 2025-08-03T16:45:31-07:00
New Revision: 45a061b8c81837d8283bcf4ad79df7d0f60b19a5
URL: https://github.com/llvm/llvm-project/commit/45a061b8c81837d8283bcf4ad79df7d0f60b19a5
DIFF: https://github.com/llvm/llvm-project/commit/45a061b8c81837d8283bcf4ad79df7d0f60b19a5.diff
LOG: 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.
Added:
Modified:
llvm/include/llvm/MC/MCSymbolCOFF.h
llvm/include/llvm/MC/MCWinCOFFStreamer.h
llvm/lib/MC/MCParser/COFFMasmParser.cpp
llvm/lib/MC/MCWinCOFFStreamer.cpp
llvm/lib/MC/WinCOFFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCSymbolCOFF.h b/llvm/include/llvm/MC/MCSymbolCOFF.h
index 2964c521e8e44..3b90e7c812dc7 100644
--- a/llvm/include/llvm/MC/MCSymbolCOFF.h
+++ b/llvm/include/llvm/MC/MCSymbolCOFF.h
@@ -65,8 +65,6 @@ class MCSymbolCOFF : public MCSymbol {
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 05def07a7d9dd..45849b99de36a 100644
--- a/llvm/include/llvm/MC/MCWinCOFFStreamer.h
+++ b/llvm/include/llvm/MC/MCWinCOFFStreamer.h
@@ -72,7 +72,7 @@ class MCWinCOFFStreamer : public MCObjectStreamer {
/// \}
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 282f22fd33609..229b0b8d53892 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 b69c2103d059f..a45936bebf0c1 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 856850d8ef292..0cc5ff5d66d8b 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();
More information about the llvm-commits
mailing list