浏览代码

* 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;