LLVM 22.1.6
[Clang][Coroutines] Don't emit fake uses for coroutine parameters (#194690) Fixes issue: https://github.com/llvm/llvm-project/issues/192351 The combination of coroutines with -fextend-variable-liveness has resulted in use-after-free, caused by the fact that we insert fake uses of coroutine parameters at the end of the coroutine. While this is fine for normal functions, in coroutines these variables are stored in the coroutine frame, which is freed before the end of the function; this results in us loading from the deleted frame. This patch fixes this by no longer emitting fake uses for most coroutine parameters. Since coroutine parameters will be saved back to the frame when we suspend, and currently may not be optimized out, fake uses are not needed in this case, and so by not emitting them we avoid dealing with the complexity of updating fake uses in the CoroSplit pass. The exception to this is 'this', which is not saved to the frame. (cherry picked from commit efb01c1bf558eaaf8ec64e1a54110584e827f21b)
Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called “LLVM”. This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.