https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115865
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Previously, lower_try_finally got: try { .ASAN_MARK (UNPOISON, &C.0, 12); x = {}; x._M_len = 3; x._M_array = &C.0; } finally { .ASAN_MARK (POISON, &C.0, 12); } but now we remove the ASAN_MARK calls. So we end up with: try { x = {}; x._M_len = 3; x._M_array = &C.0; } finally { } and ICE on the empty finally.