<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/54760>54760</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Cannot compile C++-20 coroutines while loop, with clang-14 -O2/-O3 flag.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          gen740
      </td>
    </tr>
</table>

<pre>
    - clang-14 cannot compile following code. (this code is almost same as the code listed on [cppreference.com](https://en.cppreference.com/w/cpp/language/coroutines#co_yield)
```
#include <coroutine>
#include <iostream>

struct Generator {
  struct promise_type;
  using handle = std::coroutine_handle<promise_type>;
  struct promise_type {
    static auto get_return_object_on_allocation_failure() {
      return Generator(nullptr);
    }
    auto get_return_object() { return Generator{handle::from_promise(*this)}; }
    auto initial_suspend() noexcept { return std::suspend_always{}; }
    auto final_suspend() noexcept { return std::suspend_always{}; }
    void unhandled_exception() { std::terminate(); }
    void return_void() {}
    auto yield_value(bool value) { return std::suspend_always{}; }
  };
  Generator(Generator&& rhs) : coro(rhs.coro) { rhs.coro = nullptr; }
  ~Generator() {
    if (coro) {
      coro = nullptr;
    }
  }

 private:
  handle coro;
  Generator(handle h) : coro(h) {}
};

int a = 3;
int b = 3;

// this is bad
Generator wait() {
  while (b < a) {
    co_yield true;
  }
}

// this is ok
// Generator wait()
// {
//     bool flag = b < a;
//     while (flag) {
//         co_yield true;
//     }
// }

int main() {}
```
- flag: `-std=c++20 -O3`
- Operating System: `MacOS Monterey (version 12.3.1)`
- hardware: `MacBookPro 16-inch, 2019 (Intel)`
- It cannot be compiled with docker-linux.
    - I tried to compile this code using compiler explorer like [this](https://godbolt.org/z/YqGeEhPdq), but it failed.
    - g++11 can compile this code

## Compiler Error
```
Stack dump:
0.      Program arguments: /usr/local/bin/clang-14 -cc1 -triple x86_64-apple-macosx12.0.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj --mrelax-reloca
tions -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=all -ffp-contract=on -fno-rounding-math -funwind-tables=2
 -fcompatibility-qualified-id-block-type-checking -fvisibility-inlines-hidden-static-local-var -target-cpu penryn -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=lldb -target-linker-version 7
62 -fcoverage-compilation-dir=/Users/gen740/Home -resource-dir /usr/local/lib/clang/14.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -stdlib=libc++ -internal-isystem /usr/local/bin/../include/c++/v1
-internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include -internal-isystem /usr/local/lib/clang/14.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/
include -O3 -std=c++20 -fdeprecated-macro -fdebug-compilation-dir=/Users/fujimotogen/Home -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.
1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fmax-type-align=16 -fcolor-diagnostics -vectorize-loops -vectorize-slp -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /var/folders/mp/z2c3md_527n2mwxlzr77n3rm0000gn/T/test-9208b4.o -x
 c++ test.cpp
1.      <eof> parser at end of file
2.      Optimizer
3.      While splitting coroutine @_Z4waitv
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-14                 0x000000010c93d11a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 42
1  clang-14                 0x000000010c93c098 llvm::sys::RunSignalHandlers() + 248
2  clang-14                 0x000000010c93d7b0 SignalHandler(int) + 288
3  libsystem_platform.dylib 0x00007ff8044c3dfd _sigtramp + 29
4  libsystem_platform.dylib 0x0000600000778238 _sigtramp + 18446708923632927832
5  clang-14                 0x000000010d95c552 llvm::CoroSplitPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) + 802
6  clang-14                 0x000000010d8d7812 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CoroSplitPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::Lazy
CallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) + 18
7  clang-14                 0x000000010b9d7a77 llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::Laz
yCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) + 535
8  clang-14                 0x000000010c2a7c02 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCa
llGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::Analy
sisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) + 18
9  clang-14                 0x000000010b9d9bc2 llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult
&) + 338
10 clang-14                 0x000000010c2a8292 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, ll
vm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) + 18
11 clang-14                 0x000000010b9d8f81 llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 2529
12 clang-14                 0x000000010c2a80b2 llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisM
anager<llvm::Module>&) + 18
13 clang-14                 0x000000010c177609 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 441
14 clang-14                 0x000000010c2a335d llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 477
15 clang-14                 0x000000010d8d1f92 llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<ll
vm::Module>&) + 18
16 clang-14                 0x000000010c177609 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 441
17 clang-14                 0x000000010cc2473d (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_
stream> >&, std::__1::unique_ptr<llvm::ToolOutputFile, std::__1::default_delete<llvm::ToolOutputFile> >&) + 14237
18 clang-14                 0x000000010cc1adcb clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm
::StringRef, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream> >) + 4891
19 clang-14                 0x000000010cf36482 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 1810
20 clang-14                 0x000000010e09f164 clang::ParseAST(clang::Sema&, bool, bool) + 564
21 clang-14                 0x000000010d27750a clang::FrontendAction::Execute() + 90
22 clang-14                 0x000000010d1dca86 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 838
23 clang-14                 0x000000010d2ee698 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 680
24 clang-14                 0x000000010a7e5480 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2064
25 clang-14                 0x000000010a7e3689 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) + 281
26 clang-14                 0x000000010a7e33d6 main + 11542
27 dyld                     0x000000012124e51e start + 462
clang-14: error: unable to execute command: Segmentation fault: 11
clang-14: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 14.0.0 (https://github.com/llvm/llvm-project.git 3f43d803382d57e3fc010ca19833077d1023e9c9)
Target: x86_64-apple-darwin21.4.0
Thread model: posix
InstalledDir: /usr/local/bin
clang-14: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-14: note: diagnostic msg: /var/folders/mp/z2c3md_527n2mwxlzr77n3rm0000gn/T/test-d84e60.cpp
clang-14: note: diagnostic msg: /var/folders/mp/z2c3md_527n2mwxlzr77n3rm0000gn/T/test-d84e60.sh
clang-14: note: diagnostic msg: Crash backtrace is located in
clang-14: note: diagnostic msg: /Users/gen740/Library/Logs/DiagnosticReports/clang-14_<YYYY-MM-DD-HHMMSS>_<hostname>.crash
clang-14: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang-14: note: diagnostic msg:

********************
```

- I realized that, `final_suspend()` or `yield_value` returns `std::suspend_never{}`, clang-14 can compile this code.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlG9ty4jj2a-gXlSnfwOYhDwRyq002qZCe3pkXl2zJoGnfRrYT6K_fcyQZTCDdZLZnpmc2RcDI0rnfJB_ikm3OLJJktFhajk8SWhRlQ5Iyr0TGSVpmWfkiiiWMMD4kAzdsVqJW3wh80iwv64bUNOeE1qRZcX0rE3XDGSkLMhidJ1UlecolLxI-BMiD0RzgrJqmqgfedOBewosXw4Np7uUL_MMwvCN9LV1yHChl2Tai4PXA9ZIy2giesYE7GdjzgT0djG3z0l9dTxRJ1gJNA2-2XTrwLo7dF8CM5DTf3VbvMNgmDbniBZe0KSUZBOf6DiHmXiXLXNQ8ajYVAN_ebWuU3YoWLEMEc5jOkGdvuiUl0ncB-z6Mix6YI0j6NOAE2oiE0LYpyZI3keRNK4uojH_lSROVRURBjwnMgcuUiqyVIMkQhLYPhhC9cMcqzCraLKsaiRL2enMHwXz35TjiHYpDuMF5xzdKIwXOIsOeWjVFM0OUgMU7P4JMFKIRNIvqtq54wQyqouTrhFdNH-dW5GYqyOKFbmpk_C3gqSj-ANDPpWCkLTTfLNLgQCM9MW0BNlzmQERj1HQclhE2Xve0ecCNcpDomWYtQovLMiPmy-T3MqNHum99a-ldj-FF5KpWeLwpQZOHGTAy1JcGvfmu_KMzttfoLvo4DuxWpBiZekD7Jn0E9lEr3l6agUqKZ1SA1w10fqzwHOfezFi9Ynn1Wjd9-el3UTSEKjK97R0ci1-NdWELgyZRsRheMWV6fBeiXqhoDkX1ssKojlaA4Y7QA3F18ZRAxOkHsj3K3yak_Lw3fIycvQlb3OY7_ikDTTO6VJx3hHqHE7fM4OQ9TnqT3maqN2nHVEfW_LVuciqKI072Kt1YinDUPAxZyqPmycA9h5drE-ve6828r1A2mB8WG8iWuVl1R5P7BbkrCwgBfIPsPXNZQ5ggjjv0hg6KcAdkRSV7oZLvFp-X5ecHsHhnbEFmA8ubEdd2JgjoBmBm--tvmi7lx7zL-oy8iGZFWJl85tLKRNGuhzsLgTUgRwGzILR0dcKuKNAZz4xLwtdVVkq4yMRnjsWAiutHCoBlyeIya4alBFVefoH_n3-74herB_YbUgxcxG1DREMwfXG2R9BSS9hxkJdDmvbt1YMXmXX0XUgJjntMlYuGJp8Ja_NqGwHsobYnEO9S0pxQuWxzXjS1kr572dYSSxVItCDlyxgN5nJbWVlJ4hALJFcBbetwHI19i1bwxcppUtZr0K49BBv51BaMpxbWQmIN5vM0fby6eIruFxHc44pcb96fA8OMwyWkd84syLyJJWpqtTWUS70lX5nDc9HgILGsXPKMri14By4015iiamIxWBADtanksCTJOJUWrRsr5iko2IpBWpA0dvOy7Dm3wHRFKkDOOJyArVoq81gFFIwAE53KSkERaoA0vG6wDCSKDFOvWDmoMCMVlDcWvFkZf4avLsxJQQfcqkqBrgIcQo1DrDStrAScR1KoP7w5uI2VFqUFxVbBwDIBJZi2lbYFVLXMapBUUN_cNfZkpWg-gDgWmWg21m8tzZADZglmxUDTZwurLytZ8eQzWrqVPou6my2KDOtSayUY44WlqzJLGQQwDlJowGR4YyVVSyDFyg1Q17QFVwNLDJbIZY6iQ1PhtLFAapmWu1gDFUqbIHcLnL5Q-BmP2-USHBUAwQDwkmUs3qICgtCLuxgSaD7HruIURsEALO0xWtpMoCjBcD_WsAQdkxeBb8PFdQkqAsuoy1YmHCce2nwm4s7m4dPxtUmLelPLEmIMjN2KWFK5gas5KrKEIAjX4I85pM5bkN4ThH_Eu5j_Cz9UOPzPsGafCcZTRAAcithEVQCO2odyTWGBMPqWIw6H8GZqfaRRr4erZ8cEw2OQfj-5B2R0-4wTKD4mxqMQ-Bovku9McZf1DLZ7jxymsrQXTyCAQcLBITDFr1tT2v4q8rIpwaq2JpVqo84EhCECmQr9BvwMtgMNbCKgeIC4mSrfq3FygTFdcQ5BsHPKWiyhWoZtDcEAtcTtp7SWWRmDkBjAAIeBnGYBuWtAYqXLok06pwAK_aFrMoqj44XIq0wkEBYh-rQZxqo0Wa-tbc2uKOl_ySFqqsgA8WKJIJ2xcjHIfiAFuixgaykSmPmseBJfIEKWZbU3UGcQ-uZRdDWbRdfTny6i-afp46UbzS5vouniDoESq0QlQzBBYZYZ02LNcY_8xU28nEUjNyjc_GWdfZFBUHgyt-FvieJ-gn-MsdbEtcPYH4LO1ibude7UhWAjDJPwoATjZQp7UlJRCZoktCEY7MuUYPTWk10z-R5kkgM7Jq16ZviTqtZqEGvT6BLBbIDJwLejX3ysEJ9fp15VicA0Um9yKA-IzhtQPPCiRmVvyhZKoGdOVLbRkxA1bA_xniQP06drAiZU80adTvDiWciywKxNMCJDur-9_ekuWvx8d35_e_PLxWOES2AYyxuVW_ACi9fJrg4guwOT13_22tZ_jp1MPOY4VNFmdlabWl88SACs2HyCRIXbst0kSV-i7hwC91AzYKZRdSfox3c7Mz2VhMSehMdIeGyLBTpNdq32LGhGYYfF9UOj09M5DWKb7AEEeD3C3dCA9AjUgrGOV1EFcQLKh3zINjBoQAZpGtq-n3gsZSQCz4ZkDqagoJjtg_9NIGNFWhCErhe-AuKEvj8O7HDiemPPnbhB6Bmpjk5jl01GyWjk9qQ6A2NeoGk_0NrIV7bFnlpv6ZfNDEqUK0mrlR5azGZGw7tpUxDgphb1HS0gNUP0nH0bRH_9_hyA7l0c4DiYs3d3dgVAP1YMYuUjr9usUTO0FkPbSGp8oqRCFoROX1KMN1DAGy8AYd1hdfduLvflvXfrASoULp8505Lk9Z8g39cTtIzeKWI88fvHGo5jvD84zW7iCQtoEPTVirbyO1n7U3T-_bStJfX31_nIG2lWwhOziEuDxP7-weJvYDpaTu81oB8u7v0FEc88oflRfaCLe5OT494kTvouAJs4IRtA8Mgrjrutf2SFYc7mtmLzPCM3xz41dIRQyX330HFc-j-E32n5_MXe94OZ0aHf4ZnwaX4XpqHTA36n9v1P5QNsxe4lbLMVNlT_lNEKn_YcFZ5e9i5hmSWGfbNbGnU7HSieT3UAO36fA3S0zt7F9vcy_i3b5E1L_JYwtYROFOnWIrzTBOoEwdienFBGHBPjH8z4iSz7vjnaxMaO04zI80bswBxu1LG2_AReWHH5dgL6XmQH5pTaGZ26yXTSdwb_t23_CLM_kMn3oO4ngK-a_Pj_0OSD03hOXD_wGB4p0qIsNnnZ1vqUsVLnchON6iIXzbSueR5nm2ue4Zm6Gn9sC3Pcqc67H0TF0XqwGUEd3qtJ5_rR2DTRzR6zXadFFDn6oi3Eby2PVHdCj0M8CqxepGh41B0IHlvNeEoh_UVg5BwbFo5D2PYy6QYnsku4J9ODjw7u26Zqm0uh9f8uYl4t79Fg7NV3vc71wxPV51CWxKQnbVSVkbjGta-M-e4s_qJYKl0pGfSmXHMKiW_BqUxW9-aAP4G35nDqDALLFS--MetJPYr7xqRbuDo2RYlP18e6kGqkKJaPPD0WvAbu9BXYH8T4XpmdcdZw0nnr5DR1p97YD90j_M1AYm3euaU-gX6StKj1g6iPhXhlB9PF0wx7LNb7VaNjnv67p-07uD1JnbHfJ-gBn5AA9H10C55To1Dsb9l9mqOSsW_wnlavMjcIRjbt472UyM5W09oX1jxpux4yhWjS8XdaWckcltBwvG_yunXiBkyUFgnfw9SZWfg2Yb3D5G6T555WkjGX8_Ek3HN2jXZH07PpGtgn4YBmdBNNxDjsJHJajUQDPvJDsI7EiUxPUC9bSUk36JreLFlR2fnx1Gza9sdgQHfubWlx7a0ZnFb5ADHeOJyQTgwz50kZVY-kRQ77p5_UI8abvMqOUrbbdoTGH93TKgbE77Gxao7SDuSMuidUbkDYJmMHy_dBuI7r85HDsYNVNjoqjA2EjgLggpgulilpC-yGwGdyXDON_T74aBtvLvgSn-wpCyAqLOGo43wFnhokqbHRDpjpMiKsVajU0-UMi4S25sR6VmOcE9Gzt0kPCdm2bOkOiMNuJ9Gs2th0OStl6Q986I2ds0OYQLzU91hoe17oshFIOk0wBFJnEnqeHQTMsV2PT5LJFrfOM8jVXn8Ro_JFFK4zBGLMxBVEY0ZyXRZPSVXWwjwJVi6SAe9zoeRztJviQJxFqRolye5JN8lr5XzmZOd_ePW6tx5uL6aLCzJ9eprOrsnT9QW5vL-9vf908-8rcnlze7EgT_dq-PzjFXm8eLh_fNrSAHU7CDfhUMUxontYQC2qORUVDpVumQg84iFQmpI6kaJqthMkJ6ofCe7SZgvyJAl8h8f1LPT52N49lv-T8dar96CdSVqvCLaDYQ-W-pVAJ7p3WQ451oO0a265LZd4Z1fOPfKqlE3da7mLINj9DH_W3Z01n1vX13d3iwUEPBxfwRos8-HrMEGK30dZmKzKsuaqpUCvV40Q8J3ijyck7BGrsmA1BgrVh6Bx7AWJE13neznQq99FdP2fBCIBtkwwRTsmJZhzpP8dOyJK1S_RbyeHQd09XuOdgw7ygkMgNO2ygLmrTM0PTQ47NYcf2JnHJt6EfmhEk_Gz2f7PUWa6S8XC6mz7KxDTB4zdNIhB9a7uui7vXbAIbGHCxtzhh1ZmZ-8Lxdh3Vdct7vMvRz5skD-sziDpTUYTFnDbj90JFEiu641SbrsjOvbsEfuQ0Zhn9dlgBOS6BX8hCgRcD0bzD-LMtV3X9u0RbHjCUTj0GeXU87kdxKMxtUcD34ZyUWRDpAM7Yj_IM0VS3ILR-zb-uqbe3YTQBfmJc4UO4NO2WZXyTDvNB4X5TFH-X6azmCs">