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

    <tr>
        <th>Summary</th>
        <td>
            fatal error: error in backend: failed to perform tail call elimination on a call site marked musttail
        </td>
    </tr>

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

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

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

<pre>
    Code:

https://godbolt.org/z/87fP1qKPM

```
__attribute__((noinline))
int square(int num) {
    return num * num;
}

int test(int num) {
  [[clang::musttail]]
  return square(num);
}
```

When trying godbolt's armv7-a clang (trunk) compiler with option -mcpu=cortex-m0

Fails with:
fatal error: error in backend: failed to perform tail call elimination on a call site marked musttail
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -S -target arm-linux-gnueabi --gcc-toolchain=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabi --sysroot=/opt/compiler-explorer/arm/gcc-12.2.0/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot -fcolor-diagnostics -fno-crash-diagnostics -mcpu=cortex-m0 <source>
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '<source>'.
4.      Running pass 'ARM Instruction Selection' on function '@_Z4testi'
 #0 0x000055678316783f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bb883f)
 #1 0x000055678316586c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bb686c)
 #2 0x00005567830b8b67 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3b09b67)
 #3 0x000055678315d4d2 llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bae4d2)
 #4 0x00005567809334cf (/opt/compiler-explorer/clang-trunk/bin/clang+++0x13844cf)
 #5 0x00005567830c19ea llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3b129ea)
 #6 0x00005567830c1b7e (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3b12b7e)
 #7 0x000055678123625e llvm::ARMTargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x1c8725e)
 #8 0x000055678425796e llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4ca896e)
 #9 0x000055678425969a llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4caa69a)
#10 0x000055678426fcb5 llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4cc0cb5)
#11 0x0000556784284801 llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4cd5801)
#12 0x000055678429a7ee llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4ceb7ee)
#13 0x000055678430d18e llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4d5e18e)
#14 0x000055678430e80f llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4d5f80f)
#15 0x0000556784310eff llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#16 0x00005567811b95a8 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) ARMISelDAGToDAG.cpp:0:0
#17 0x00005567824bbee0 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#18 0x00005567829cf460 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3420460)
#19 0x00005567829cf5d9 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34205d9)
#20 0x00005567829d01c0 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x34211c0)
#21 0x000055678355200a clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3fa300a)
#22 0x000055678445d368 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4eae368)
#23 0x000055678568b84d clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x60dc84d)
#24 0x000055678445c995 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4ead995)
#25 0x0000556783d36ec1 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4787ec1)
#26 0x0000556783cbb303 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x470c303)
#27 0x0000556783e1b3bb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x486c3bb)
#28 0x00005567809348fc cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x13858fc)
#29 0x00005567809300bc ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#30 0x0000556783b1bcc9 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#31 0x00005567830b8a57 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3b09a57)
#32 0x0000556783b1befc clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#33 0x0000556783ae43dc clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x45353dc)
#34 0x0000556783ae4dcd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4535dcd)
#35 0x0000556783aef21c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x454021c)
#36 0x0000556780932a03 clang_main(int, char**) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x1383a03)
#37 0x00007f2a4b129083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#38 0x000055678092c1fe _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0x137d1fe)
clang-17: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Compiler returned: 70
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl9v4zYS_zTKC2GDov4_5MFx4nZ7G2yQ5HrAvRgUNXLYUKRLUvlzn_5ASbZFx8mmrbo44ICs1yYp8je_Gc4MR6TG8I0EOA-SiyC5PKOtfVD6_Df7IHhzVqrq9XypKgiiRYAvAzx8Pli7Na6NrAKy2qiqVMLOld4EZPWfgKzyrL4Jf__HzfX4oSDFw1_3c72m1mpethbW64DkAcml4lJwCQEp3F83jEuLzO8t1RCQ3P2QbROQAgXZRT8AIYQ02FZL14UCsuiGREN3kF2OQbgZLBj77mQdDxdMULlxAkaLpjXWUi6C5NL9DcOGFffI-olOrOoL3X_-6wEksvqVyw0ayAtIZhDVzVM2o6hbHQUkt7qVjw4gU82WC9DomdsHpLaWK4lmDdu2QXTJlLbwMmu8NVaUC9MN3-uuppYKBForHUSL_gviEpWUPYKsXFtNuYAKWYW2oGulG-RER4wKgUDwhkvaLa0kon2r4RZQQ_UjVGhPVbfczderxd0VMm3ZcIsoKtsN0rBV2rr5j0yI24e2nDPVBGQlxNPuv9lWq9-A2YCsuDEtmICsEJUV4pKJtgJkHwAxTc1DJ4XVlEFAlmirYasVA2OgQka1um92T1JjFOPUQoV0K5Fhmm_tvId8Zyl7RFXbbPek4XmAixutNpo2iOpN24C0DjgKyEptHbKdcmbwshVKg3ZtToWzQX-rkstdW0AuAnKBZpvqmep6FqPZBs2Um4xut27K1m5bOzdododmluoNWGcXM8Fl-zLbyBZoydFstmFsZpUS7IFyGUSXH6Kh2hHqHgnJnMxx3zRr5aNUz_LN3ObVaKXslLN-p29YEc1qpoTSs4rTjVTGcmbQrJZq1unYbz62fhREy0HV0VWvvNApL4iWoOogukJbqg1oRC0CWSFVo5oL6EcSN9J5OrQBCbqz8r4ncj23rZRut26pMSgg2aqVrNsIN67hmkq6cZRkbmM0qmoFuFEeIJINRhafmnBxe42-SGN12897BwK6b8Ok9W5BN22M1_-OnRfj7lfvkQISYYRfMMY4SdIsj0L3UaNuM3WOzLya_suN5tJ2pn7f75f8MEjT57UyVgNtApK6PcOl7Vyk89B_3uADcoFforLM86je-3YHOjwCneQpOwV6KYDKdvtN3vGNpCIgeSu70FUhodwqk0FM85R5EIkHEZd5mWYjiEtnmrfA1BPo16WSFl5s3_MzlZWAqxc-hJvpQOKiTDMPZOTzmFRxRU4rv3OL_Y8xtCUqlRLTQaQQV8SDGI8h4iKKYlZPslgY5XHMfLtKfKWxsAA64qMPROsuJK77kDjeBvfPXAJiSrpMIZ2enJAUQD286THeMoPJFisz8BbLxouFJEpJAiNyFrfX913k-aqeQfNdJtT9WlIhfKpOjHSDdi1fZK0GDg8P3TVUiF-BWaW_NFsRRMtR3-WvVLS9z0z75EcaO42hsDwjic9FPuYiJklWpGMuPiTiXv05KqaUKWY0L1JfpuJIpiItxsa_Dy6Xi58uWi4q0H2HcEC_yCf1SEsBf13NF9RwdiEUe9ztpcVUeyhmlKbFYQ-5UIJ9sdOalclnxH5Pn67pghrfEbw11L13OPz_gyhgmJWJR0HoU5DHOQ4_Q8ETN9y-2duuwWUlIwKmgl4lOQ496MSHXtAM4NPQPdjjRGp65FBmAB5yL_bGEa7C_D3kX-5AjFsP5uFJwAU3ds2ty0TdaW153FVBd9DqWqSqYN2fCY03dMSDM8qaCgPelyfFq87PjtqsHnzv2Ir_N_D0u2s6VVYJhLmvyvhIlZDj-pOqXHTOYtCm8dS5Py5Mbo1VUue49kRIfBFCDPX3RdCt_CavKXvgEnZoPRHe9O1kmG-ptu7wV6Djqeds6w7SuPu3x-dlOmFYFgnN3URUKvnaqNYgSRsw2-5oUuwzksvFT_dqCsyL22s3x26-0yC9DInEZQmA0bszu1PgCNNJMB8yd2K-07i8bIUUrI7TMa7VjXt0dx79w4j-erIZExyn2LPH4hhyUhWfgHzdHaN9fQ5Nk8JNqmIMl2AfboVDNmZYwIay1-EsdQDeZ7ED-L8ddBgyj2Pin6KThGA8lBGHg17D7UVf5vvWFZgCko-6Lw91lSu56SqwXa4zGvIz0Ar0HVDNHr71vt1Li0ZDl6qCn0B-Z1SfUH5n0FcqN6eGjNyZddnnLdR-8471xdGEAwmLfRAytup7Wsl_b2G9tX540_R5vX3W3MJ6VxYZPVRBTVvhwp8AC995MLrq4thEVlDTCGMv_yV-BhUnVZTmJ4RfKmnaZrfZ-iLFvabSiK7s9U_Jj8xjcXe_q2tMGLqAQpTmngBeIpWkeZnH1ViAG6oNLO7ufXh30FDvlD7taT3FFcvjygMaHzHNiiI5sQUGMxtqLcBaCzvLyyfksSoK7xRA_OJHFaXAwjG8lXbq3G-DMb4pkWV5BsxL8olf5mBlGeHIJ65fy6WKVDI4zd37okxonxlmEY489F5WEEFYRmXpudke50GIJ8XoW8xvhJzwTJinLCpLD3V-VHeL85ohxsJ1Q7kfqxZa01fnS6Mle6D6cGLt82-_bZevTwc-jPIkr5kHvjgCj3HJ0I7nZXjfbfT8o8rSW0k6G6k0fwJ9Mss6qqSXYclY0Qk7ijC7ivxad3x1vf3m6Ry9G8KoECVlj-taOhwHA-jXHoxhGS5V01BZHe_Dk3rZh57-gEWPamf7aDgEm1GsWq_Zy0sY9j9Kd1Jxgakr5nQceYNdw9pqyq3ZdR9NR4Vwxt2dBnf9bsji4H8X-0pX_0hAMkGbsqIByQ5UkXxXwP9Flaf1ER5X4GnyuQr8bSvvaA3i1aPzY9VNWKSnSTY25qM3CWVYgtuJ_8d2cXQMetcA_LcbFOKoep-4TmH0TWTbsem54qMH3YD3ctEPhi6OXhJMWN1NoiSqPJfov0dxZFSs-qNk_KJK8z4Tv6jyK_fKfh8X7_fK31Lu9D68UPoseYOF_I0UVszL347eDlGoSfiuPV2OvnsB_kRkf4_6H0jhRHlEEmMS-naXHoViQne52y6T2IHuvMZi2swgon4ytn-JldWExmVICpxHaL0WvHQOjGrboRqWF7wMyOolT9dpfLh90HewuVHztFuHxDj3VzlKnggLa0D9_BNJllVhfShC9s-E2f6GjvvSXwiqh1QXsUH7w22d7k4QvHC3XytAGXbAWgNo9oSsQgYA8VEmOiy0S0KHq0zQ3f_J8Fl1HlVFVNAzOA_TLCFZRJLs7OE8zmkY05JiSlgMaUmSMqtIUdKEFmWcpWf8nGASYYLDMItxks1TnOI0jllCU5KHYRnEGBrKxdztg7nSm7PuTs95iuMkORO0BGG6e2iESHhGXWdASJBcnunz7jZQ2W5MEGPBjTWHWSy3As5_2O2ms1aL8z9_famT9r8BAAD__0bOE7g">