@@ -352,10 +352,9 @@ COFFSymbol *WinCOFFObjectWriter::getLinkedSymbol(const MCSymbol &Symbol) {
352352
353353// / This function takes a symbol data object from the assembler
354354// / and creates the associated COFF symbol staging object.
355- void WinCOFFObjectWriter::DefineSymbol (const MCSymbol &MCSymGeneric ,
355+ void WinCOFFObjectWriter::DefineSymbol (const MCSymbol &MCSym ,
356356 MCAssembler &Assembler,
357357 const MCAsmLayout &Layout) {
358- const auto &MCSym = cast<MCSymbolCOFF>(MCSymGeneric);
359358 COFFSymbol *Sym = GetOrCreateCOFFSymbol (&MCSym);
360359 const MCSymbol *Base = Layout.getBaseSymbol (MCSym);
361360 COFFSection *Sec = nullptr ;
@@ -366,7 +365,7 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
366365 }
367366
368367 COFFSymbol *Local = nullptr ;
369- if (MCSym.isWeakExternal ()) {
368+ if (cast<MCSymbolCOFF>( MCSym) .isWeakExternal ()) {
370369 Sym->Data .StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
371370
372371 COFFSymbol *WeakDefault = getLinkedSymbol (MCSym);
@@ -377,9 +376,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
377376 WeakDefault->Data .SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
378377 else
379378 WeakDefault->Section = Sec;
380- // Make the default symbol static, in order to not conflict with
381- // similar default symbols for the same weak in other objects.
382- WeakDefault->Data .StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
383379 Local = WeakDefault;
384380 }
385381
@@ -398,8 +394,14 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
398394 else
399395 Sym->Section = Sec;
400396 Local = Sym;
397+ }
401398
402- Local->Data .StorageClass = MCSym.getClass ();
399+ if (Local) {
400+ Local->Data .Value = getSymbolValue (MCSym, Layout);
401+
402+ const MCSymbolCOFF &SymbolCOFF = cast<MCSymbolCOFF>(MCSym);
403+ Local->Data .Type = SymbolCOFF.getType ();
404+ Local->Data .StorageClass = SymbolCOFF.getClass ();
403405
404406 // If no storage class was specified in the streamer, define it here.
405407 if (Local->Data .StorageClass == COFF::IMAGE_SYM_CLASS_NULL) {
@@ -411,12 +413,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
411413 }
412414 }
413415
414- if (Local) {
415- Local->Data .Value = getSymbolValue (MCSym, Layout);
416-
417- Local->Data .Type = MCSym.getType ();
418- }
419-
420416 Sym->MC = &MCSym;
421417}
422418
0 commit comments