[llvm] e2d761d - MCSymbolELF: Migrate away from classof
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 3 15:05:28 PDT 2025
Author: Fangrui Song
Date: 2025-08-03T15:05:22-07:00
New Revision: e2d761df321a711234470b7596a47ccd6ffd665d
URL: https://github.com/llvm/llvm-project/commit/e2d761df321a711234470b7596a47ccd6ffd665d
DIFF: https://github.com/llvm/llvm-project/commit/e2d761df321a711234470b7596a47ccd6ffd665d.diff
LOG: MCSymbolELF: Migrate away from 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/lib/MC/ELFObjectWriter.cpp
llvm/lib/MC/MCContext.cpp
llvm/lib/MC/MCELFStreamer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index ae8dffc297de4..76294ef7513bf 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -401,14 +401,14 @@ static bool isIFunc(const MCSymbolELF *Symbol) {
mergeTypeForSet(Symbol->getType(), ELF::STT_GNU_IFUNC) !=
ELF::STT_GNU_IFUNC)
return false;
- Symbol = &cast<MCSymbolELF>(Value->getSymbol());
+ Symbol = &static_cast<const MCSymbolELF &>(Value->getSymbol());
}
return true;
}
void ELFWriter::writeSymbol(SymbolTableWriter &Writer, uint32_t StringIndex,
ELFSymbolData &MSD) {
- const auto &Symbol = cast<MCSymbolELF>(*MSD.Symbol);
+ auto &Symbol = static_cast<const MCSymbolELF &>(*MSD.Symbol);
const MCSymbolELF *Base =
cast_or_null<MCSymbolELF>(Asm.getBaseSymbol(Symbol));
@@ -446,7 +446,7 @@ void ELFWriter::writeSymbol(SymbolTableWriter &Writer, uint32_t StringIndex,
const MCSymbolELF *Sym = &Symbol;
while (Sym->isVariable()) {
if (auto *Expr = dyn_cast<MCSymbolRefExpr>(Sym->getVariableValue())) {
- Sym = cast<MCSymbolELF>(&Expr->getSymbol());
+ Sym = static_cast<const MCSymbolELF *>(&Expr->getSymbol());
if (!Sym->getSize())
continue;
ESize = Sym->getSize();
@@ -523,7 +523,7 @@ void ELFWriter::computeSymbolTable(const RevGroupMapTy &RevGroupMap) {
// Add the data for the symbols.
bool HasLargeSectionIndex = false;
for (auto It : llvm::enumerate(Asm.symbols())) {
- const auto &Symbol = cast<MCSymbolELF>(It.value());
+ auto &Symbol = static_cast<const MCSymbolELF &>(It.value());
if (!isInSymtab(Symbol))
continue;
@@ -533,7 +533,7 @@ void ELFWriter::computeSymbolTable(const RevGroupMapTy &RevGroupMap) {
}
ELFSymbolData MSD;
- MSD.Symbol = cast<MCSymbolELF>(&Symbol);
+ MSD.Symbol = static_cast<const MCSymbolELF *>(&Symbol);
MSD.Order = It.index();
bool Local = Symbol.getBinding() == ELF::STB_LOCAL;
@@ -1175,7 +1175,7 @@ void ELFObjectWriter::executePostLayoutBinding() {
// versions declared with @@@ to be renamed.
for (const Symver &S : Symvers) {
StringRef AliasName = S.Name;
- const auto &Symbol = cast<MCSymbolELF>(*S.Sym);
+ auto &Symbol = static_cast<const MCSymbolELF &>(*S.Sym);
size_t Pos = AliasName.find('@');
assert(Pos != StringRef::npos);
@@ -1185,8 +1185,8 @@ void ELFObjectWriter::executePostLayoutBinding() {
if (Rest.starts_with("@@@"))
Tail = Rest.substr(Symbol.isUndefined() ? 2 : 1);
- auto *Alias =
- cast<MCSymbolELF>(Asm->getContext().getOrCreateSymbol(Prefix + Tail));
+ auto *Alias = static_cast<MCSymbolELF *>(
+ Asm->getContext().getOrCreateSymbol(Prefix + Tail));
Asm->registerSymbol(*Alias);
const MCExpr *Value = MCSymbolRefExpr::create(&Symbol, Asm->getContext());
Alias->setVariableValue(Value);
@@ -1218,7 +1218,8 @@ void ELFObjectWriter::executePostLayoutBinding() {
}
for (const MCSymbol *&Sym : AddrsigSyms) {
- if (const MCSymbol *R = Renames.lookup(cast<MCSymbolELF>(Sym)))
+ if (const MCSymbol *R =
+ Renames.lookup(static_cast<const MCSymbolELF *>(Sym)))
Sym = R;
if (Sym->isInSection() && Sym->getName().starts_with(".L"))
Sym = Sym->getSection().getBeginSymbol();
@@ -1234,7 +1235,7 @@ void ELFObjectWriter::executePostLayoutBinding() {
continue;
auto *Expr = Alias->getVariableValue();
if (const auto *Inner = dyn_cast<MCSymbolRefExpr>(Expr)) {
- auto &Sym = cast<MCSymbolELF>(Inner->getSymbol());
+ auto &Sym = static_cast<const MCSymbolELF &>(Inner->getSymbol());
if (Asm->registerSymbol(Sym))
Sym.setBinding(ELF::STB_WEAK);
}
@@ -1328,7 +1329,7 @@ void ELFObjectWriter::recordRelocation(const MCFragment &F,
uint64_t FixupOffset = Asm->getFragmentOffset(F) + Fixup.getOffset();
uint64_t Addend = Target.getConstant();
if (auto *RefB = Target.getSubSym()) {
- const auto &SymB = cast<MCSymbolELF>(*RefB);
+ auto &SymB = static_cast<const MCSymbolELF &>(*RefB);
if (SymB.isUndefined()) {
Ctx.reportError(Fixup.getLoc(),
Twine("symbol '") + SymB.getName() +
@@ -1363,7 +1364,7 @@ void ELFObjectWriter::recordRelocation(const MCFragment &F,
!mc::isRelocRelocation(Fixup.getKind());
if (UseSectionSym && useSectionSymbol(Target, SymA, Addend, Type)) {
Addend += Asm->getSymbolOffset(*SymA);
- SymA = cast<MCSymbolELF>(SecA->getBeginSymbol());
+ SymA = static_cast<const MCSymbolELF *>(SecA->getBeginSymbol());
} else if (const MCSymbolELF *R = Renames.lookup(SymA)) {
SymA = R;
}
@@ -1383,7 +1384,7 @@ bool ELFObjectWriter::usesRela(const MCTargetOptions *TO,
bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
const MCSymbol &SA, const MCFragment &FB, bool InSet, bool IsPCRel) const {
- const auto &SymA = cast<MCSymbolELF>(SA);
+ auto &SymA = static_cast<const MCSymbolELF &>(SA);
if (IsPCRel) {
assert(!InSet);
if (SymA.getBinding() != ELF::STB_LOCAL ||
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index 4d89a2d73e4dd..ce5edc54b133f 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -306,13 +306,16 @@ MCSymbol *MCContext::cloneSymbol(MCSymbol &Sym) {
auto Name = Sym.getNameEntryPtr();
switch (getObjectFileType()) {
case MCContext::IsCOFF:
- NewSym = new (Name, *this) MCSymbolCOFF(cast<MCSymbolCOFF>(Sym));
+ NewSym =
+ new (Name, *this) MCSymbolCOFF(static_cast<const MCSymbolCOFF &>(Sym));
break;
case MCContext::IsELF:
- NewSym = new (Name, *this) MCSymbolELF(cast<MCSymbolELF>(Sym));
+ NewSym =
+ new (Name, *this) MCSymbolELF(static_cast<const MCSymbolELF &>(Sym));
break;
case MCContext::IsMachO:
- NewSym = new (Name, *this) MCSymbolMachO(cast<MCSymbolMachO>(Sym));
+ NewSym = new (Name, *this)
+ MCSymbolMachO(static_cast<const MCSymbolMachO &>(Sym));
break;
default:
reportFatalUsageError(".set redefinition is not supported");
@@ -601,7 +604,7 @@ MCSectionELF *MCContext::getELFSection(const Twine &Section, unsigned Type,
const MCSymbolELF *LinkedToSym) {
MCSymbolELF *GroupSym = nullptr;
if (!Group.isTriviallyEmpty() && !Group.str().empty())
- GroupSym = cast<MCSymbolELF>(getOrCreateSymbol(Group));
+ GroupSym = static_cast<MCSymbolELF *>(getOrCreateSymbol(Group));
return getELFSection(Section, Type, Flags, EntrySize, GroupSym, IsComdat,
UniqueID, LinkedToSym);
diff --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp
index 38744a07a2adb..fcc0262768a30 100644
--- a/llvm/lib/MC/MCELFStreamer.cpp
+++ b/llvm/lib/MC/MCELFStreamer.cpp
@@ -277,7 +277,7 @@ void MCELFStreamer::emitCommonSymbol(MCSymbol *S, uint64_t Size,
}
void MCELFStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
- cast<MCSymbolELF>(Symbol)->setSize(Value);
+ static_cast<MCSymbolELF *>(Symbol)->setSize(Value);
}
void MCELFStreamer::emitELFSymverDirective(const MCSymbol *OriginalSym,
More information about the llvm-commits
mailing list