Jelajahi Sumber

* resume needs to be surrounded by an empty landing pad

git-svn-id: branches/debug_eh@41375 -
florian 6 tahun lalu
induk
melakukan
502febc968
1 mengubah file dengan 14 tambahan dan 2 penghapusan
  1. 14 2
      compiler/psabiehpi.pas

+ 14 - 2
compiler/psabiehpi.pas

@@ -527,17 +527,29 @@ implementation
       var
         cgpara1: tcgpara;
         pd: tprocdef;
-        action: TPSABIEHAction;
+        action, ReRaiseLandingPad: TPSABIEHAction;
+        psabiehprocinfo: tpsabiehprocinfo;
       begin
        cgpara1.init;
         if not(fc_catching_exceptions in flowcontrol) and
            use_cleanup(exceptframekind) then
           begin
+            psabiehprocinfo:=current_procinfo as tpsabiehprocinfo;
+            psabiehprocinfo.CreateNewPSABIEHCallsite;
+
+            ReRaiseLandingPad:=TPSABIEHAction.Create(nil);
+            psabiehprocinfo.PushAction(ReRaiseLandingPad);
+            psabiehprocinfo.PushLandingPad(ReRaiseLandingPad);
+
             pd:=search_system_proc('fpc_resume');
             paramanager.getintparaloc(list,pd,1,cgpara1);
             hlcg.a_load_reg_cgpara(list,voidpointertype,t.unwind_info,cgpara1);
             paramanager.freecgpara(list,cgpara1);
-            hlcg.g_call_system_proc(current_asmdata.CurrAsmList,'fpc_resume',[@cgpara1],nil).resetiftemp
+            hlcg.g_call_system_proc(current_asmdata.CurrAsmList,'fpc_resume',[@cgpara1],nil).resetiftemp;
+
+            psabiehprocinfo.CreateNewPSABIEHCallsite;
+            psabiehprocinfo.PopLandingPad(psabiehprocinfo.CurrentLandingPad);
+            psabiehprocinfo.PopAction(ReRaiseLandingPad);
           end
         else
           hlcg.g_call_system_proc(current_asmdata.CurrAsmList,'fpc_reraise',[],nil).resetiftemp;