<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/134054>134054</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
CoroEarlyPass asserts when using thinlto pipeline: CoroInstr.h:220: void llvm::CoroIdInst::setCoroutineSelf(): Assertion `isa<ConstantPointerNull>(getArgOperand(CoroutineArg)) && "Coroutine argument is already assigned"' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
LTO,
coroutines
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zmodem
</td>
</tr>
</table>
<pre>
Consider:
```
$ cat /tmp/a.cc
#include <coroutine>
struct BasicCoroutine { // From https://theshoemaker.de/posts/yet-another-cpp-coroutine-tutorial
struct Promise {
BasicCoroutine get_return_object() { return BasicCoroutine {}; }
void unhandled_exception() noexcept { }
void return_void() noexcept { }
std::suspend_never initial_suspend() noexcept { return {}; }
std::suspend_never final_suspend() noexcept { return {}; }
};
using promise_type = Promise;
};
BasicCoroutine coro() {
co_return;
}
$ build/bin/clang -std=c++20 -O2 -flto=thin -c /tmp/a.cc -o /tmp/a.o.bc
$ build/bin/clang -c -x ir /tmp/a.o.bc
clang: /work/llvm-project/llvm/include/llvm/Transforms/Coroutines/CoroInstr.h:220: void llvm::CoroIdInst::setCoroutineSelf(): Assertion `isa<ConstantPointerNull>(getArgOperand(CoroutineArg)) && "Coroutine argument is already assigned"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: build/bin/clang -c -x ir /tmp/a.o.bc
1. Optimizer
2. Running pass "coro-cond(coro-early,cgscc(coro-split),coro-cleanup,globaldce)" on module "/tmp/a.o.bc"
3. Running pass "coro-early" on module "/tmp/a.o.bc"
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 clang 0x0000562f3ad7bf2b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 43
1 clang 0x0000562f3ad794b4 llvm::sys::CleanupOnSignal(unsigned long) + 132
2 clang 0x0000562f3acae1e0
3 libc.so.6 0x00007f695f163e20
4 libc.so.6 0x00007f695f1b7e5c
5 libc.so.6 0x00007f695f163d82 gsignal + 18
6 libc.so.6 0x00007f695f14c4f0 abort + 211
7 libc.so.6 0x00007f695f14c418
8 libc.so.6 0x00007f695f15c692
9 clang 0x0000562f3c515200
10 clang 0x0000562f3c515776 llvm::CoroEarlyPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 806
11 clang 0x0000562f3c3e6d3d
12 clang 0x0000562f3a6a9d5c llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 1436
13 clang 0x0000562f3c512141 llvm::CoroConditionalWrapper::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 161
14 clang 0x0000562f3c3e645d
15 clang 0x0000562f3a6a9d5c llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 1436
16 clang 0x0000562f3b047a5e
17 clang 0x0000562f3b04b76c
18 clang 0x0000562f3b04c327 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) + 423
19 clang 0x0000562f3b740e0f clang::CodeGenAction::ExecuteAction() + 3535
20 clang 0x0000562f3ba79cd3 clang::FrontendAction::Execute() + 35
21 clang 0x0000562f3b9f921e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1966
22 clang 0x0000562f3bb626a7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 439
23 clang 0x0000562f3794b82f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 11007
24 clang 0x0000562f37941b80
25 clang 0x0000562f3b7ae589
26 clang 0x0000562f3acae632 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 146
27 clang 0x0000562f3b7b096e
28 clang 0x0000562f3b76abbb clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 155
29 clang 0x0000562f3b76bc2f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 143
30 clang 0x0000562f3b778854 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 356
31 clang 0x0000562f379470a2 clang_main(int, char**, llvm::ToolContext const&) + 9314
32 clang 0x0000562f377ea203 main + 83
33 libc.so.6 0x00007f695f14dd68
34 libc.so.6 0x00007f695f14de25 __libc_start_main + 133
35 clang 0x0000562f379411a1 _start + 33
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 21.0.0git (https://github.com/llvm/llvm-project.git 9e5bfbf77db0945f59c0d18012a8e6d43c711b3a)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/llvm-project/build/bin
Build config: +assertions
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWE1v4zjS_jXMhbBBUd8HHxQnft8edG-CTmMWuxeDokoyNxKpJSknnl-_ICXHdmJlpweYPUxgIBJZ30-xWCpmjGgkwArFtyi-u2GD3Sm9-q1TFXQ3paoOq7WSRlSgUVgg4n8JmX6kQDTCnFmM6MZ2PaIbtuTcr4dC8naoAKNwzZVWgxUSUHg_yjBWD9ziW2YEXx93MUpvsROF6AZvtOrwztreOMV-ze7A7BR07Bn0sgJEN70y1iC6OYBdMKnsDvSC9_3iTeHCDlZpwVpECownrY9adcJ4dX4Zv7ejAbvVYActt6r8F3CLaIZo7u0b169YjtI7FN5i928UuleiwoPcMVm1UG3hlUNvhZKTMKnGFS_1Hdek3D1_Tm1s5cITFmYwPchqK2EPGgsprGDtdlq9JmPy45rhM0JrIf-gyPHVPQ5GyAb3IwBbe-hdftwdERmJ3qgRKd6F2eF6wsIJ5GpC6sQ7JimNcDmItkJ0UwqJ6Ia3TDZ44Z2744jeInpLCV48ULyoW6tQeGd3QuIFv8xmvFDnC2pZ8s_kc7x4xUJfYfEEKCzc1ovSz4hu2nbfLXqtxhzzr4huppNzWvihmTS10p3L9bdoHF--SGP1cofCglLi5PsU8qweRU9TOaoJVbBvMp6grceAOsbCGNAuRTFKiDAMhWt3-i2T9lEJaUH_bWhbd4hp1oAtdPPQg2Y-G95EFrpx4hxENEE0wYjSE4JMN0MH0mJhMGs1sOqApyJUIUoRTXHNRAvVEpHi8et98XSPzVB2wmKGy6HBGnqlLbbqXXEoh8YsndNL5QzYYCYrfKxBdgeYa2Z2uGT82WrGAdE17jX0WnEwBips1KDHZcfJjFFcMAsV1oPEhmvRW2fTk2X8GVdD148FkSyx_3vUqtGse3PQWfazGRJMsh56KzrxG2hECjqtfR-k9GeHGeNC6o7Cgisfe_8MTLcHRNe8MZwfF03fCuvhWI8MLTA59Iium1aVrK2cxzmiFCuJO1UNLWAPw6VplCJShJ9ZMmn_PXJOEcQvwu7UYLE5dKVqsWQdOJEZSDNowAc14B3bg0_mxUjkwoKFdHsaPxY__h8rjQ1YjzHIvdBK-gTbM-3S-OvXX79tn_7x7fbh65d_3n_fOhaUEJdAvctp9zCGaIQT4xEm90deCSEkTmgdsiota1qeHStzMOPDoxbSeqd-jImVnYg0e9kqYzWwzp-GNRbSjmfjFkehw_yo8FJZHpXRNWXrEcAH-SQayVpEs0GOpwe3SjZH0UHoIk2vyeYMAnB3d4hxK0q-NGqZTBRpneRxHSQhUEcRzVKUKcQuY-NPZFQZxY3xZo42ZYgUyRx9xKOaYFa6w-2oaRAgUqSz8iMeeYHZHEHMk9wFIZ9BlMdBTIlzMyAfw-R20zR5V0bvXZY_MjOBoQd5gfY3n_gT0KflQrL2YIT5xiRrXCO1_sDiSmpyBC8jibMquGJVCEkVVm6XzuRpwvIq5mfanbmfaP4Dlrrfn-h-EIXe_3AWNxpEwTtk1kpWwl1drP27Zn0_9qt_no2Jy84gug5RFHuI4r88RMlH_0sSpSwGt5te978kUZkm_r7LrvLzkE6sowXQCXvL-DPI6mGw_eDa8bPttep60YL-4jsVfvTugqKC_wP54Ntv88H7J6uFbL5Dfbl8jFXxTtpkSsHHZv6c5Yu0ejBiD9-hXkv7aC9Dua-nwrERLTwdjIXOx3V9arkHKf49wLZ_x-nukf5FCwvb421yxlRBzYbWbitowcJ_YRyz46pLrtkbOtDe5-mOov6SymegTCMCpL4S6yk6fun-Ffhg4Riw7Cg7jMPY3VJkRjhLc16F58I3Wkl7iv259Au5TmowIzWvcxoA_iyBrlo9b8bZucgTdy7oTHEuy4Qm7CK3Jy0nE_aKs48aP-b4CaEwdyrDj0fJNREZrTHnwbZj4rISFFqzg8v5cM13TGPuGn0ndkqOizW6xuO36JvWICAkdXqj666meRSUmbtd6UwZLFMGceZtT2YKJWeQhPS80rse_jtwtQd9WDsQXqePmu-DfGI1uB70zMl6kB6irfaO-g-j4-fO_amYeczmqlVakjxx9YxmcxQJK8vyHNVKi_3xBhqhYx8Sdq26bvx0mmd0BEcU3he1T0iLibpUqnVe-uXR19ifjfxK3U2TktP6Z734RZVm3oVfVPlVGHvhwlnd7Vjb_grcKv2l61sUrt8qWs-EK4C-Wf79Xk-lbc5332-Hc9UmTbMsjuZ03Z09X5zZK4d1Lm7_Q_-PhdBldjhTCdM8SgmbStWxQBw17th4CxSXJv9Qqp3O3Rmoo7Y8DCKnbqb4pSkwSkLsFI1trocjnG3wqypxDX4YzVMAjfF267a3xjJtt2_Cg9BLn6k9rjoFLMAj1xir8HxEA1orF-WJvZ4KPuZTyMcZhf9-xfAqXDAqwEEYufIyGMCLvfuwNABYnJX0_KgD70EboSSmwZIsSSOcEdnlRKMRdjeUS6660yTofGC0dFw5xGVd1mlalSSP4jrOOamCjASUZZBUUcjTIChDNur-wXQDrmLi1yzZJtFikM9SvchFK-Twumjk4Ih2GljlvuKhdaS9MuIVkcLfPW0L1Z3Qn46xzqcepLh1by5ZajFNv27Zcc5kzmMuletdClwJ1khlrOC4M37n3qGBG5CgmR0HiFcGN5lxmbjAUp3ts7J1EPSDNcvz2fVNtQqrPMzZDayCNArjLA5IdrNb1TmNaJXyJMirPI3ymieUpSULI0YZreFGrCihMYkIJXkQRNmSQRUDSUvOo7RM4gpFBDom2rdp1I0wZoBVEEYkjm5aVkJr_MCd0q8_HvyYZD3NUY6DPYriuxu98oEth8agiLTC2NOE68YK28Lq4qMUj3E1-GUHchq12p2QrVW4Fz20fgJf4L_w0PBm0O3q544RohuPj0F0M0G0X9H_BAAA___SBKjU">