[all-commits] [llvm/llvm-project] 34415f: [Clang][LLVM][Coroutines] Prevent __coro_gro from ...

Bruno Cardoso Lopes via All-commits all-commits at lists.llvm.org
Thu Sep 21 22:52:18 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 34415fd611e2d92da570bc4adf931a6410fb406e
      https://github.com/llvm/llvm-project/commit/34415fd611e2d92da570bc4adf931a6410fb406e
  Author: Bruno Cardoso Lopes <bcardosolopes at users.noreply.github.com>
  Date:   2023-09-21 (Thu, 21 Sep 2023)

  Changed paths:
    M clang/lib/CodeGen/CGCoroutine.cpp
    M clang/test/CodeGenCoroutines/coro-gro.cpp
    M llvm/docs/Coroutines.rst
    M llvm/include/llvm/IR/FixedMetadataKinds.def
    M llvm/lib/Transforms/Coroutines/CoroFrame.cpp
    A llvm/test/Transforms/Coroutines/coro-alloca-outside-frame.ll

  Log Message:
  -----------
  [Clang][LLVM][Coroutines] Prevent __coro_gro from outliving __promise (#66706)

When dealing with short-circuiting coroutines (e.g. expected), the
deferred calls that resolve the get_return_object are currently being
emitted after we delete the coroutine frame.

This was caught by ASAN when using optimizations -O1 and above:
optimizations after inlining would place the __coro_gro in the heap, and
subsequent delete of the coroframe followed by the conversion -> BOOM.

This patch forbids the GRO to be placed in the coroutine frame, by
adding a new metadata node that can be attached to `alloca`
instructions.

Fix #49843




More information about the All-commits mailing list