@@ -168,13 +168,13 @@ class llvm::WinCOFFWriter {
168168private:
169169 MCContext &getContext () const { return OWriter.getContext (); }
170170 COFFSymbol *createSymbol (StringRef Name);
171- COFFSymbol *GetOrCreateCOFFSymbol (const MCSymbol *Symbol );
171+ COFFSymbol *getOrCreateCOFFSymbol (const MCSymbol &Sym );
172172 COFFSection *createSection (StringRef Name);
173173
174174 void defineSection (MCSectionCOFF const &Sec);
175175
176176 COFFSymbol *getLinkedSymbol (const MCSymbol &Symbol);
177- void defineSymbol (const MCSymbol &Symbol);
177+ void defineSymbol (const MCSymbolCOFF &Symbol);
178178
179179 void SetSymbolName (COFFSymbol &S);
180180 void SetSectionName (COFFSection &S);
@@ -244,10 +244,10 @@ COFFSymbol *WinCOFFWriter::createSymbol(StringRef Name) {
244244 return Symbols.back ().get ();
245245}
246246
247- COFFSymbol *WinCOFFWriter::GetOrCreateCOFFSymbol (const MCSymbol *Symbol ) {
248- COFFSymbol *&Ret = SymbolMap[Symbol ];
247+ COFFSymbol *WinCOFFWriter::getOrCreateCOFFSymbol (const MCSymbol &Sym ) {
248+ COFFSymbol *&Ret = SymbolMap[&Sym ];
249249 if (!Ret)
250- Ret = createSymbol (Symbol-> getName ());
250+ Ret = createSymbol (Sym. getName ());
251251 return Ret;
252252}
253253
@@ -303,7 +303,7 @@ void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec) {
303303 // Create a COMDAT symbol if needed.
304304 if (MCSec.getSelection () != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
305305 if (const MCSymbol *S = MCSec.getCOMDATSymbol ()) {
306- COFFSymbol *COMDATSymbol = GetOrCreateCOFFSymbol ( S);
306+ COFFSymbol *COMDATSymbol = getOrCreateCOFFSymbol (* S);
307307 if (COMDATSymbol->Section )
308308 report_fatal_error (" two sections have the same comdat" );
309309 COMDATSymbol->Section = Section;
@@ -339,7 +339,8 @@ void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec) {
339339 }
340340}
341341
342- static uint64_t getSymbolValue (const MCSymbol &Symbol, const MCAssembler &Asm) {
342+ static uint64_t getSymbolValue (const MCSymbolCOFF &Symbol,
343+ const MCAssembler &Asm) {
343344 if (Symbol.isCommon () && Symbol.isExternal ())
344345 return Symbol.getCommonSize ();
345346
@@ -354,21 +355,20 @@ COFFSymbol *WinCOFFWriter::getLinkedSymbol(const MCSymbol &Symbol) {
354355 if (!Symbol.isVariable ())
355356 return nullptr ;
356357
357- const MCSymbolRefExpr *SymRef =
358- dyn_cast<MCSymbolRefExpr>(Symbol.getVariableValue ());
358+ const auto *SymRef = dyn_cast<MCSymbolRefExpr>(Symbol.getVariableValue ());
359359 if (!SymRef)
360360 return nullptr ;
361361
362- const MCSymbol &Aliasee = SymRef->getSymbol ();
362+ auto &Aliasee = static_cast < const MCSymbolCOFF &>( SymRef->getSymbol () );
363363 if (Aliasee.isUndefined () || Aliasee.isExternal ())
364- return GetOrCreateCOFFSymbol (& Aliasee);
364+ return getOrCreateCOFFSymbol ( Aliasee);
365365 else
366366 return nullptr ;
367367}
368368
369369// / This function takes a symbol data object from the assembler
370370// / and creates the associated COFF symbol staging object.
371- void WinCOFFWriter::defineSymbol (const MCSymbol &MCSym) {
371+ void WinCOFFWriter::defineSymbol (const MCSymbolCOFF &MCSym) {
372372 const MCSymbol *Base = Asm->getBaseSymbol (MCSym);
373373 COFFSection *Sec = nullptr ;
374374 MCSectionCOFF *MCSec = nullptr ;
@@ -380,7 +380,7 @@ void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) {
380380 if (Mode == NonDwoOnly && MCSec && isDwoSection (*MCSec))
381381 return ;
382382
383- COFFSymbol *Sym = GetOrCreateCOFFSymbol (& MCSym);
383+ COFFSymbol *Sym = getOrCreateCOFFSymbol ( MCSym);
384384 COFFSymbol *Local = nullptr ;
385385 if (static_cast <const MCSymbolCOFF &>(MCSym)
386386 .getWeakExternalCharacteristics ()) {
@@ -819,13 +819,14 @@ void WinCOFFWriter::executePostLayoutBinding() {
819819 defineSection (static_cast <const MCSectionCOFF &>(Section));
820820 }
821821
822- if (Mode != DwoOnly)
823- for (const MCSymbol &Symbol : Asm->symbols ())
822+ if (Mode != DwoOnly) {
823+ for (const MCSymbol &Symbol : Asm->symbols ()) {
824+ auto &Sym = static_cast <const MCSymbolCOFF &>(Symbol);
824825 // Define non-temporary or temporary static (private-linkage) symbols
825- if (!Symbol .isTemporary () ||
826- static_cast < const MCSymbolCOFF &>(Symbol). getClass () ==
827- COFF::IMAGE_SYM_CLASS_STATIC)
828- defineSymbol (Symbol);
826+ if (!Sym .isTemporary () || Sym. getClass () == COFF::IMAGE_SYM_CLASS_STATIC)
827+ defineSymbol (Sym);
828+ }
829+ }
829830
830831 UseBigObj = Sections.size () > COFF::MaxNumberOfSections16;
831832 Header.NumberOfSections = Sections.size ();
0 commit comments