[llvm] 85f0070 - MCSymbolMachO: Migrate away from classof
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 3 17:48:55 PDT 2025
Author: Fangrui Song
Date: 2025-08-03T17:48:50-07:00
New Revision: 85f00707dd651d6c09c25aab882dc568a1f32f52
URL: https://github.com/llvm/llvm-project/commit/85f00707dd651d6c09c25aab882dc568a1f32f52
DIFF: https://github.com/llvm/llvm-project/commit/85f00707dd651d6c09c25aab882dc568a1f32f52.diff
LOG: MCSymbolMachO: 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/MCMachOStreamer.cpp
llvm/lib/MC/MachObjectWriter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index a2145133566dc..c850ed9fec26b 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -147,7 +147,7 @@ void MCMachOStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
void MCMachOStreamer::emitEHSymAttributes(const MCSymbol *Symbol,
MCSymbol *EHSymbol) {
- auto *Sym = cast<MCSymbolMachO>(Symbol);
+ auto *Sym = static_cast<const MCSymbolMachO *>(Symbol);
getAssembler().registerSymbol(*Symbol);
if (Symbol->isExternal())
emitSymbolAttribute(EHSymbol, MCSA_Global);
@@ -172,7 +172,7 @@ void MCMachOStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
//
// FIXME: Cleanup this code, these bits should be emitted based on semantic
// properties, not on the order of definition, etc.
- cast<MCSymbolMachO>(Symbol)->clearReferenceType();
+ static_cast<MCSymbolMachO *>(Symbol)->clearReferenceType();
}
void MCMachOStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
@@ -182,7 +182,7 @@ void MCMachOStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
if (const auto *SymA = Res.getAddSym()) {
if (!Res.getSubSym() &&
(SymA->getName().empty() || Res.getConstant() != 0))
- cast<MCSymbolMachO>(Symbol)->setAltEntry();
+ static_cast<MCSymbolMachO *>(Symbol)->setAltEntry();
}
}
MCObjectStreamer::emitAssignment(Symbol, Value);
@@ -256,7 +256,7 @@ void MCMachOStreamer::emitDarwinTargetVariantBuildVersion(
bool MCMachOStreamer::emitSymbolAttribute(MCSymbol *Sym,
MCSymbolAttr Attribute) {
- MCSymbolMachO *Symbol = cast<MCSymbolMachO>(Sym);
+ auto *Symbol = static_cast<MCSymbolMachO *>(Sym);
// Indirect symbols are handled
diff erently, to match how 'as' handles
// them. This makes writing matching .o files easier.
@@ -367,7 +367,7 @@ bool MCMachOStreamer::emitSymbolAttribute(MCSymbol *Sym,
void MCMachOStreamer::emitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {
// Encode the 'desc' value into the lowest implementation defined bits.
getAssembler().registerSymbol(*Symbol);
- cast<MCSymbolMachO>(Symbol)->setDesc(DescValue);
+ static_cast<MCSymbolMachO *>(Symbol)->setDesc(DescValue);
}
void MCMachOStreamer::emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
@@ -430,7 +430,7 @@ void MCMachOStreamer::finishImpl() {
// defining symbols.
DenseMap<const MCFragment *, const MCSymbol *> DefiningSymbolMap;
for (const MCSymbol &Symbol : getAssembler().symbols()) {
- auto &Sym = cast<MCSymbolMachO>(Symbol);
+ auto &Sym = static_cast<const MCSymbolMachO &>(Symbol);
if (Sym.isSymbolLinkerVisible() && Sym.isInSection() && !Sym.isVariable() &&
!Sym.isAltEntry()) {
// An atom defining symbol should never be internal to a fragment.
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index e87696a93cddd..bcdc0012ebf98 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -72,7 +72,7 @@ bool MachObjectWriter::doesSymbolRequireExternRelocation(const MCSymbol &S) {
// References to weak definitions require external relocation entries; the
// definition may not always be the one in the same object file.
- if (cast<MCSymbolMachO>(S).isWeakDefinition())
+ if (static_cast<const MCSymbolMachO &>(S).isWeakDefinition())
return true;
// Otherwise, we can use an internal relocation.
@@ -383,15 +383,16 @@ const MCSymbol &MachObjectWriter::findAliasedSymbol(const MCSymbol &Sym) const {
}
void MachObjectWriter::writeNlist(MachSymbolData &MSD, const MCAssembler &Asm) {
- const MCSymbol *Symbol = MSD.Symbol;
- const auto &Data = cast<MCSymbolMachO>(*Symbol);
- const MCSymbol *AliasedSymbol = &findAliasedSymbol(*Symbol);
+ auto *Symbol = static_cast<const MCSymbolMachO *>(MSD.Symbol);
+ const auto &Data = static_cast<const MCSymbolMachO &>(*Symbol);
+ auto *AliasedSymbol =
+ static_cast<const MCSymbolMachO *>(&findAliasedSymbol(*Symbol));
uint8_t SectionIndex = MSD.SectionIndex;
uint8_t Type = 0;
uint64_t Address = 0;
bool IsAlias = Symbol != AliasedSymbol;
- const MCSymbol &OrigSymbol = *Symbol;
+ const MCSymbolMachO &OrigSymbol = *Symbol;
MachSymbolData *AliaseeInfo;
if (IsAlias) {
AliaseeInfo = findSymbolData(*AliasedSymbol);
@@ -441,9 +442,8 @@ void MachObjectWriter::writeNlist(MachSymbolData &MSD, const MCAssembler &Asm) {
// The Mach-O streamer uses the lowest 16-bits of the flags for the 'desc'
// value.
- bool EncodeAsAltEntry =
- IsAlias && cast<MCSymbolMachO>(OrigSymbol).isAltEntry();
- W.write<uint16_t>(cast<MCSymbolMachO>(Symbol)->getEncodedFlags(EncodeAsAltEntry));
+ bool EncodeAsAltEntry = IsAlias && OrigSymbol.isAltEntry();
+ W.write<uint16_t>(Symbol->getEncodedFlags(EncodeAsAltEntry));
if (is64Bit())
W.write<uint64_t>(Address);
else
@@ -570,7 +570,8 @@ void MachObjectWriter::bindIndirectSymbols(MCAssembler &Asm) {
//
// FIXME: Do not hardcode.
if (Asm.registerSymbol(*ISD.Symbol))
- cast<MCSymbolMachO>(ISD.Symbol)->setReferenceTypeUndefinedLazy(true);
+ static_cast<MCSymbolMachO *>(ISD.Symbol)
+ ->setReferenceTypeUndefinedLazy(true);
}
}
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
index 354de8fd7b4bb..8ee3a2d26a599 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
@@ -505,7 +505,7 @@ class ARMTargetMachOStreamer : public ARMTargetStreamer {
// Remember that the function is a thumb function. Fixup and relocation
// values will need adjusted.
getStreamer().getAssembler().setIsThumbFunc(Symbol);
- cast<MCSymbolMachO>(Symbol)->setThumbFunc();
+ static_cast<MCSymbolMachO *>(Symbol)->setThumbFunc();
}
};
} // namespace
More information about the llvm-commits
mailing list