Explorar o código

cs_opt_consts: disable when non-local gotos are active

This optimisation can insert code after the call to fpc_setjmp, resulting in
it not getting executed after a longjmp. Fixes tmacnonlocalgoto on AArch64
with -O2 or higher.
Jonas Maebe %!s(int64=2) %!d(string=hai) anos
pai
achega
d12bf094ab
Modificáronse 1 ficheiros con 5 adicións e 1 borrados
  1. 5 1
      compiler/psub.pas

+ 5 - 1
compiler/psub.pas

@@ -1314,7 +1314,11 @@ implementation
        if cs_opt_use_load_modify_store in current_settings.optimizerswitches then
          do_optloadmodifystore(code);
 
-       if cs_opt_consts in current_settings.optimizerswitches then
+       if (cs_opt_consts in current_settings.optimizerswitches) and
+          { non-local gotos can cause an fpc_setjmp call to be generated before
+            this block, which means the loaded value won't be loaded when the
+             longjmp is performed }
+          not(m_non_local_goto in current_settings.modeswitches) then
          do_consttovar(code);
       end;