소스 검색

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 2 년 전
부모
커밋
d12bf094ab
1개의 변경된 파일5개의 추가작업 그리고 1개의 파일을 삭제
  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;