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

    <tr>
        <th>Summary</th>
        <td>
            Clang-18 crash: error in backend: Segmented stacks do not support vararg functions.
        </td>
    </tr>

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

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

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

<pre>
    Clang-18 with -fsplit-stack -fcf-protection -c crashes on the test case.
Compiler explorer: https://godbolt.org/z/s6shbx9a6
```
$cat mutant.c
#include <stdarg.h>
#include <stdlib.h>

static void use_buffer (char *buf) __attribute__ ((noinline));
static void
use_buffer (char *buf)
{
 buf[0] = '\0';
}

static void
down (int i, ...)
{
  char buf[1];
  va_list ap;

  va_start (ap, i);
  if (va_arg (ap, int) != 1
      || va_arg (ap, int) != 2
      || va_arg (ap, int) != 3
 || va_arg (ap, int) != 4
      || va_arg (ap, int) != 5
      || va_arg (ap, int) != 6
      || va_arg (ap, int) != 7
      || va_arg (ap, int) != 8
      || va_arg (ap, int) != 9
      || va_arg (ap, int) != 10)
    abort ();

  if (i > 0)
    {
      use_buffer (buf);
      down (i - 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 }
}

int
main (void)
{
  down (1000, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  return 0;
}


$clang-18 -fsplit-stack -fcf-protection -c mutant.c
fatal error: error in backend: Segmented stacks do not support vararg functions.
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: clang-18 -fsplit-stack -fcf-protection -c mutant.c
1. <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'mutant.c'.
4.      Running pass 'Prologue/Epilogue Insertion & Frame Finalization' on function '@down'
 #0 0x00007f7e6b938266 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2b266)
 #1 0x00007f7e6b936170 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd29170)
 #2 0x00007f7e6b9378c4 llvm::sys::CleanupOnSignal(unsigned long) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2a8c4)
 #3 0x00007f7e6b8859ae (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc789ae)
 #4 0x00007f7e6b88596b (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7896b)
 #5 0x00007f7e6b932a67 llvm::sys::Process::Exit(int, bool) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd25a67)
 #6 0x000055b093de6c23 (/usr/lib/llvm-18/bin/clang+0x13c23)
 #7 0x00007f7e6b893c4f llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc86c4f)
 #8 0x00007f7e6b893b26 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc86b26)
 #9 0x00007f7e6e511ee5 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x3904ee5)
#10 0x00007f7e6be036b4 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x11f66b4)
#11 0x00007f7e6bcec552 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x10df552)
#12 0x00007f7e6ba7e0df llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe710df)
#13 0x00007f7e6ba83dc3 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe76dc3)
#14 0x00007f7e6ba7e7d4 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe717d4)
#15 0x00007f7e7411b09f clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, 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>>) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1ade09f)
#16 0x00007f7e744b15fe (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1e745fe)
#17 0x00007f7e730cd866 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0xa90866)
#18 0x00007f7e74f25645 clang::FrontendAction::Execute() (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x28e8645)
#19 0x00007f7e74ea3cc4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x2866cc4)
#20 0x00007f7e74fa01c0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x29631c0)
#21 0x000055b093de6837 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-18/bin/clang+0x13837)
#22 0x000055b093de3905 (/usr/lib/llvm-18/bin/clang+0x10905)
#23 0x00007f7e74b3b909 (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24fe909)
#24 0x00007f7e6b88594c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7894c)
#25 0x00007f7e74b3b2ae clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24fe2ae)
#26 0x00007f7e74b030f1 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24c60f1)
#27 0x00007f7e74b0333e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24c633e)
#28 0x00007f7e74b1f39c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24e239c)
#29 0x000055b093de325c clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm-18/bin/clang+0x1025c)
#30 0x000055b093df0f32 main (/usr/lib/llvm-18/bin/clang+0x1df32)
#31 0x00007f7e69e1cc87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#32 0x000055b093de01ea _start (/usr/lib/llvm-18/bin/clang+0xd1ea)
clang-18: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 18.0.0 (++20231018091808+48a53509e851-1~exp1~20231018091910.1571)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang-18: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-18: note: diagnostic msg: /tmp/mutant-59f97a.c
clang-18: note: diagnostic msg: /tmp/mutant-59f97a.sh
clang-18: note: diagnostic msg: 

********************
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Wsty4zazfhp6g5IKF14XXsiylZmU59g1dnKqzkYFgk0JJxTIHwA9dhZ59r_Ai0RorIztUeJyURQu3R8aja8bgLgxcqMALoPoKoiuL3hrt7W-lHzHVa1ednVrhLnI6-LlcllxtZmRFH2TdotmpWkqaWfGcvEHmpWinDW6tiCsrBWaCSQ0N1swqFbIbgFZMBYJbmAe4OsAL5b1rpEVaATPTVVr0AFboK21jQnYIqCrgK42dZHXlZ3XehPQ1Z8BXZnYbPPnjMe9jCDGw3__lYaCW7RrLVd2LsZCJpWo2gJQwJbGFlxv5tuA3ZyormQ-re6exnIrBXqqZYFaA-u8LUvQKKCp2HL3ucjbMqAZWq-5tVrmrYX12tUHNFW1VJVUENDM_bOr72T2BX8neACTDH2RK42ucBBdo4Bdo4AmQbTE7mMUHyTXJ0bQFxT1N-X0SGWRDOgSzefzVxShDkevjgTR9V4-Qk98XUljEW8OSg9VxnJtnQLeOOlyOnSEZOmqnvia682kkbLOiAElblBkbOz-gmQZJEv09z3ou3uwocebGofvFh-9u0f87h7Ju3uk7-6RvbsHwXtncn14XvfeMHUD3xkkCtgN8rtN_ND9-StkWBnMa7J3azRDxMHqHtQ9mHuE7hG5R-weiXuk7pF1jbEn8bCG_MXkhtq97LjstHXL6pXFM6IhGOOfBYM02FYrhE8t8QMHjjz9Q4r2mbLkllcItK47Lu5ekFQo5-IPUIUre4DNDpSFAnUyDSpqpGqLTNs0boafuHZOUbaq02EGrr-_vVk83CDT5jtpEUd5u0Eauh62PiZ9abdtPhf1LqCrqnoaPxz0_wdhA7qSxrRgArpCXBVopG8XZLqY0wG2mgtwZmw0NLoWYIxDXbe6L3Y9uTG1kNwNR7cKGaFlYwfID53NinbXOGRdEZ6je11vNN8hrjetM4SDjT5qbzJ3IQfq0jl-w7UBjbhFoApUl6iUFfTt6Lz37WVdANqAAs2dwL6SDZVfW6Wk2qCGG-PiwWqYAnTvCr5wxTegA5q4cLyri7YC12oPiCbDuMMT8u51XdWbFgK6umlk94o-KwO6UxLQGK003wFaScUr-WePsFc3ekMXpkLsFoV7G9YYZRjhZ4wxTsoE4jxjKY1j1M08WwRsYV5M_3KvpbLdvDz2k5seGmn-bV0bq4HvAhp7fJQGdNUa7dxI5qMzEVeaSxXQlYt7Y5XMb29__zIj6dzUcxLQK_xc0JzG8YGWAsrIEeCYJPg1wF9b9SA3ilefuCoq0KYnwHNgykiCPUz0CFOSivA1TMsKuGqbuwFZQNNWdRlggapabc4Ej6ci9OAxD16aRhmHn1ckkjTj4CkKv1MU5-dRFOeeoujI4JTHyete25FP_-XmWdo-6XIumtd1dSaDRzxOPHjxAC-KcpyxAmJB2RsUdVzWySRMUOaJTHzTZkyE5WTEPaGvuyiy7qPIdIU-fpMKkKiVscMKPdvwRRqLsPSwpsdYcxqfRVFOfS7IpoogIgQg-nlFLMMhQHTIKSgjPk0CZnEe_rwmQso4zkNPk89vAkQU0clEf-FiKxWMEcYFmMEDWnWnxmJv8g-F8VlmnOCijCLqofYZkCeAi6l7ru4d0DEQ_st4IXGIPbg-I_KUFYK9Ae6XLnZ7YMeic0GNC8E8qOGxZZNiGlsq2HDxMrDdAfTnXVPtgf-jgElS-A485eYkJCTHWdmnaQMN76S96rPau9Y2rePkSfW15BtVGyuFuVGbbuveEdakySfgBegH4Fps75ou1_W4bdLUpW2_gPpBq0euN2B_0OiWq81rTQ6mfbBaqs1XKP3i0eKLI4GDERaDs0-7fFZWt0Y-wVcol8reWx2w5aH6qRwW_UpW8PBiLOwCduNEGFv0Na2S_2lh3Rz1dKla801LC-sxYZt0KqDkbWXXBVRg4Qcd2U2n8_1O1Kfsomk6N0p7TuEF4MxfpLHnSGFOovL9acuryiAJoxI8ZdP4mjAsijSOp5N177YIi4dH31kfYMe9gPrxwPoaUJ7hdJL-OpypZ5SSRnEYTXGudK3swauGxAdEa-GDCfBrwGgKaRz6ITLzkAFnQoT-UuzPHD8rY7kS4GEbF0F6eigfY6zX0cexEB5rUezblWMisMdaPc7DIJ5qwb_H_N0g3ao_E-osZkRgDzU5TjRTliAhyHrHpU_7C635i6MmtuxOFQcGWwy84ZfRZX9Y-Vbw08Q1ZYkHkR5BZBl-S442EYkz7HkaZd5c5SzP8JlMHJaQ4cxT9v2eJhQTpl5qbrZfQdRPoF-WzmGf7WEDykuoXrx5GPfja93NRXeqPR7NfYhNX90uhcIbQ3RsMMph6tyFlk9jorNckmW923FVHJPHq860jx11Fxp55UWNQ0QcosUk2KzX4vmZkP5Lzo0ULrJIh6lzUa-xK1hbzaU1Y_WROF5VbkXWelLvmiwOpNx5c-fkZ_MWyr0wQv2YlWOGS3LS0h1X8O94ejS_RyxHHV2DU4nK3zRdHO3-zmkMEeOSeMZIjo3B2Gm3O2GMX-vcnLbEr3V-K409lY_teFX9DsLWQz588NaGS-cow1nAW403uNQ_aELGfH_yw31OSpaJU3CvJ-9euHolTp0y_b9ownNRNlCW-XSXHYccGg1GG-PiCLqjmcVAEpPjkrquBi6fuNY7IyGmkQdrf9Q6wCpxySgabzHeLrcombf39k9EMyBCpAlar53B-pvA9aBklbeyKgK62ri62fL3X7_9X77_Suc0cZpMOxq-f-0qOzlzEbAFC8OALfBB_XGAxwQ4OlxBvnlgBQG-H9d4rL-_C9mf9aNySAuRGHyr5LKCor8Yh2fppqwAlGCnvTWAZk_I1sgAIDnJ2gZFv-Wtsu0g-gm0kbVCJJ3jOe7RXwX0imLKCCYpzkiKXVmY8ohFOIM0IjPyFzw35K9Jo4zgOYmSAxv2G0w3huc0XsfhrBGzSqr2ebZR7dBkq4EXaFcX4HbuqKmNfO6rumSyqqC4lp0d9iZ1JvzOXKp2W7cFKvYbabQzm67fMGc_8T-57BrulRaPj4vlJ_T46Qat7m5v7_738__8glafb28e0ONdV3z12y_o68393dfH_W3O_Wv3Qqlxa-zk3dC-gQbUhXooELd7kW80AV3ZXRPQVX_5MouyMkv4eCn0UzLM9gNzca4ZGX-LcVFcsiJjGb-AS5JgQuMkDOnF9pKEUVxmaZZBXBKRFSSKaBnGFOI8j0POL-Rl58CEZiQkCaVzxjEWOQlDFuclp3kQYthxWc3dEp7XenPRXQVeJizJkouK51CZ7ocslCr4hrrKgNIgur7Ql92yz9uNCUJcSWPNQYqVtoLD71u6W8SzXYFetLq6_PgdZze2_wYAAP__ZIBA_w">