]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Avoid cfg corruption when using sjlj exceptions where loops are present in the assign...
authorJoern Rennecke <joern.rennecke@riscy-ip.com>
Mon, 12 Aug 2024 10:04:51 +0000 (11:04 +0100)
committerJoern Rennecke <joern.rennecke@riscy-ip.com>
Mon, 12 Aug 2024 10:06:17 +0000 (11:06 +0100)
2024-08-06  Joern Rennecke  <joern.rennecke@riscy-ip.com>

gcc/
* except.cc (sjlj_emit_function_enter):
Set fn_begin_outside_block again if encountering a jump instruction.

gcc/except.cc

index b5886e97be9ce005157a9a91ac95d288bb5b517c..5bb5edbd8065f768e8f01cf4baabf1a1daceda05 100644 (file)
@@ -1228,6 +1228,10 @@ sjlj_emit_function_enter (rtx_code_label *dispatch_label)
        else if (NOTE_INSN_BASIC_BLOCK_P (fn_begin))
          fn_begin_outside_block = false;
       }
+    /* assign_params can indirectly call emit_block_move_via_loop, e.g.
+       for g++.dg/torture/pr85627.C for 16-bit targets.  */
+    else if (JUMP_P (fn_begin))
+      fn_begin_outside_block = true;
 
 #ifdef DONT_USE_BUILTIN_SETJMP
   if (dispatch_label)