Răsfoiți Sursa

* do not add references to external procedures and variables to the used
compiler symbols of the current module (useless, and moreover crashes
clang)

git-svn-id: branches/debug_eh@41215 -

Jonas Maebe 6 ani în urmă
părinte
comite
016882ca82
1 a modificat fișierele cu 4 adăugiri și 2 ștergeri
  1. 4 2
      compiler/rautils.pas

+ 4 - 2
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;