[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