diff --git a/compiler/rautils.pas b/compiler/rautils.pas index 2afc9e1846..75231a88c9 100644 --- a/compiler/rautils.pas +++ b/compiler/rautils.pas @@ -1388,13 +1388,15 @@ begin begin case srsym.typ of staticvarsym: - cnodeutils.RegisterUsedAsmSym(current_asmdata.RefAsmSymbol(srsym.mangledname,AT_DATA),tstaticvarsym(srsym).vardef,true); + if not(vo_is_external in tstaticvarsym(srsym).varoptions) then + cnodeutils.RegisterUsedAsmSym(current_asmdata.RefAsmSymbol(srsym.mangledname,AT_DATA),tstaticvarsym(srsym).vardef,true); procsym: begin { if it's a pure assembler routine, the definition of the symbol will also be in assembler and it can't be removed by the compiler (and if we mark it as used anyway, clang will get into trouble) } - if not(po_assembler in tprocdef(tprocsym(srsym).ProcdefList[0]).procoptions) then + if not(po_assembler in tprocdef(tprocsym(srsym).ProcdefList[0]).procoptions) and + not(po_external in tprocdef(tprocsym(srsym).ProcdefList[0]).procoptions) then cnodeutils.RegisterUsedAsmSym(current_asmdata.RefAsmSymbol(tprocdef(tprocsym(srsym).ProcdefList[0]).mangledname,AT_FUNCTION),tprocdef(tprocsym(srsym).ProcdefList[0]),true); end; end;