浏览代码

LLVM: fix missing line debug info for some invokes in specialised functions

Required when the code can be inlined. Fixes compilation with debug info of
system.messaging.pp
Jonas Maebe 1 年之前
父节点
当前提交
8147185907
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      compiler/llvm/dbgllvm.pas

+ 9 - 4
compiler/llvm/dbgllvm.pas

@@ -2937,18 +2937,23 @@ implementation
                         functionscope.addint64('scopeLine',tailineinfo(hp).fileinfo.line);
                         functionscope.addint64('scopeLine',tailineinfo(hp).fileinfo.line);
                         firstline:=false;
                         firstline:=false;
                       end;
                       end;
+
                     positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileinfo,functionscope,nolineinfolevel<>0);
                     positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileinfo,functionscope,nolineinfolevel<>0);
-                  end
+                  end;
+
                 { LLVM requires line info for call instructions that may
                 { LLVM requires line info for call instructions that may
                   potentially be inlined }
                   potentially be inlined }
-                else if taillvm(hp).llvmopcode in [la_call,la_invoke] then
+                if (taillvm(hp).llvmopcode in [la_call,la_invoke]) and
+                   not assigned(positionmeta) then
                   begin
                   begin
-                    positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileinfo,functionscope,true);
+                    positionmeta:=filepos_getmetanode(procdeffileinfo,procdeffileinfo,functionscope,true);
                   end;
                   end;
+
                 if assigned(positionmeta) then
                 if assigned(positionmeta) then
                   taillvm(hp).addinsmetadata(tai_llvmmetadatareferenceoperand.createreferenceto('dbg',positionmeta));
                   taillvm(hp).addinsmetadata(tai_llvmmetadatareferenceoperand.createreferenceto('dbg',positionmeta));
+
                 if (cs_debuginfo in current_settings.moduleswitches) and
                 if (cs_debuginfo in current_settings.moduleswitches) and
-                   (taillvm(hp).llvmopcode=la_call) then
+                   (taillvm(hp).llvmopcode = la_call) then
                   updatelocalvardbginfo(taillvm(hp),pd,functionscope);
                   updatelocalvardbginfo(taillvm(hp),pd,functionscope);
               end;
               end;
             hp:=tai(hp.next);
             hp:=tai(hp.next);