[all-commits] [llvm/llvm-project] 4a294b: [Clang] CGCoroutines skip emitting try block for v...

Yuxuan Chen via All-commits all-commits at lists.llvm.org
Tue Nov 28 19:04:42 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 4a294b5806417aa88c91aa05735b2d557ea5dfe5
      https://github.com/llvm/llvm-project/commit/4a294b5806417aa88c91aa05735b2d557ea5dfe5
  Author: Yuxuan Chen <ych at meta.com>
  Date:   2023-11-28 (Tue, 28 Nov 2023)

  Changed paths:
    M clang/lib/CodeGen/CGCoroutine.cpp
    M clang/test/CodeGenCoroutines/coro-init-await-nontrivial-return.cpp

  Log Message:
  -----------
  [Clang] CGCoroutines skip emitting try block for value returning `noexcept` init `await_resume` calls (#73160)

Previously we were not properly skipping the generation of the `try { }`
block around the `init_suspend.await_resume()` if the `await_resume` is
not returning void. The reason being that the resume expression was
wrapped in a `CXXBindTemporaryExpr` and the first dyn_cast failed,
silently ignoring the noexcept. This only mattered for `init_suspend`
because it had its own try block.

This patch changes to first extract the sub expression when we see a
`CXXBindTemporaryExpr`. Then perform the same logic to check for
`noexcept`.

Another version of this patch also wanted to assert the second step by
`cast<CXXMemberCallExpr>` and as far as I understand it should be a
valid assumption. I can change to that if upstream prefers.




More information about the All-commits mailing list