https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82545
--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> --- What we do: a () { int b; int b.0_1; <bb 2> [100.00%] [count: INV]: __builtin_setjmp_setup (0B, &<L0>); goto <bb 8>; [99.96%] [count: INV] <bb 3> [0.12%] [count: INV]: <L0>: __builtin_setjmp_receiver (&<L0>); goto <bb 5>; [100.00%] [count: INV] <bb 4> [0.12%] [count: INV]: # b_12(ab) = PHI <b_14(D)(ab)(2), b_13(ab)(5), b_15(ab)(6)> __builtin___asan_handle_no_return (); ABNORMAL_DISPATCHER (0); <bb 8> [99.96%] [count: INV]: <bb 5> [99.96%] [count: INV]: # b_13(ab) = PHI <b_12(ab)(3), b_14(D)(ab)(8)> b.0_1 = b_13(ab); c (b.0_1); <bb 6> [99.92%] [count: INV]: b_15(ab) = ASAN_POISON (); d (); <bb 7> [99.88%] [count: INV]: return; } We expand ASAN_POISON and we propagate ASAN report function on all edges. In this case <bb 7> -> <bb 4> is an abnormal edge, that we can't split. Thoughts?