Browse Source

* the win64 exception handling code messes with asm nodes, so mark the helper procedure that they contain assembler

git-svn-id: trunk@26162 -
florian 11 years ago
parent
commit
e914612423
1 changed files with 4 additions and 0 deletions
  1. 4 0
      compiler/x86_64/nx64flw.pas

+ 4 - 0
compiler/x86_64/nx64flw.pas

@@ -219,6 +219,8 @@ constructor tx64tryfinallynode.create(l, r: TNode);
     finalizepi.entryswitches:=r.localswitches;
     finalizepi.entryswitches:=r.localswitches;
     finalizepi.exitpos:=current_filepos; // last_endtoken_pos?
     finalizepi.exitpos:=current_filepos; // last_endtoken_pos?
     finalizepi.exitswitches:=current_settings.localswitches;
     finalizepi.exitswitches:=current_settings.localswitches;
+    { the init/final code is messing with asm nodes, so inform the compiler about this }
+    include(finalizepi.flags,pi_has_assembler_block);
     { Regvar optimization for symbols is suppressed when using exceptions, but
     { Regvar optimization for symbols is suppressed when using exceptions, but
       temps may be still placed into registers. This must be fixed. }
       temps may be still placed into registers. This must be fixed. }
     foreachnodestatic(r,@reset_regvars,finalizepi);
     foreachnodestatic(r,@reset_regvars,finalizepi);
@@ -243,6 +245,8 @@ constructor tx64tryfinallynode.create_implicit(l, r, _t1: TNode);
     finalizepi.entryswitches:=r.localswitches;
     finalizepi.entryswitches:=r.localswitches;
     finalizepi.exitswitches:=current_settings.localswitches;
     finalizepi.exitswitches:=current_settings.localswitches;
     include(finalizepi.flags,pi_do_call);
     include(finalizepi.flags,pi_do_call);
+    { the init/final code is messing with asm nodes, so inform the compiler about this }
+    include(finalizepi.flags,pi_has_assembler_block);
     finalizepi.allocate_push_parasize(32);
     finalizepi.allocate_push_parasize(32);
   end;
   end;