[all-commits] [llvm/llvm-project] 4ca8a5: [ObjC][SEH] Fix clang crash when using finally sta...

Hugo Melder via All-commits all-commits at lists.llvm.org
Mon Sep 28 14:36:07 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 4ca8a56ba3c579c01c3a9e30c6b972b8baaad208
      https://github.com/llvm/llvm-project/commit/4ca8a56ba3c579c01c3a9e30c6b972b8baaad208
  Author: Hugo Melder <service at hugomelder.com>
  Date:   2026-09-28 (Mon, 28 Sep 2026)

  Changed paths:
    M clang/lib/CodeGen/CGObjCRuntime.cpp
    A clang/test/CodeGenObjC/exceptions-seh.m

  Log Message:
  -----------
  [ObjC][SEH] Fix clang crash when using finally statements (#176779)

When targeting a platform that does not have funclet-based EH, we push
the finally cleanup (normal edge) and catchall (unwind edge) onto the
EHStack _before_ pushing all catch handlers. The try statement is then
emitted and catch handlers popped from EHStack. Last, the finally
cleanup is popped from EHStack.

For funclet-based EH, we outline and push the finally funclet (of type
`NormalAndEHCleanup`) onto the EHStack _after_ pushing the catch
handlers and never pop it. This results in a crash during codegen when
we try to emit the catch handlers. Not popping the finally cleanup from
the EHStack results in incorrect calls to cleanup handlers in nested
try/catch/finally statements.

I fixed the two issues by:
1. Pushing the finally cleanup first, and
2. Popping it at the end of `CGObjCRuntime::EmitTryCatchStmt`.

Fixes #51899



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list