ソースを参照

* 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 年 前
コミット
016882ca82
1 ファイル変更4 行追加2 行削除
  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;