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

    <tr>
        <th>Summary</th>
        <td>
            Clang crashes when compiling a variadic function while targeting mips3
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    When compiling any variadic function with options `-target mips-linux-gnu -march=mips3`, clang will crash and produce the following backtrace:

```
clang-19: /home/andrew/llvm-project/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp:172: virtual void llvm::MipsSEInstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator, const llvm::DebugLoc&, llvm::MCRegister, llvm::MCRegister, bool) const: Assertion `Opc && "Cannot copy registers"' failed.
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: /home/andrew/llvm-project/build/bin/clang-19 -cc1 -triple mips-unknown-linux-gnu -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -main-file-name test.c -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu mips3 -target-feature -noabicalls -target-feature +fpxx -target-feature +nooddspreg -target-abi o32 -mfloat-abi hard -debugger-tuning=gdb -fdebug-compilation-dir=/home/andrew/llvm-project/build/bin -fcoverage-compilation-dir=/home/andrew/llvm-project/build/bin -resource-dir /home/andrew/llvm-project/build/lib/clang/19 -internal-isystem /home/andrew/llvm-project/build/lib/clang/19/include -internal-isystem /usr/local/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -faddrsig -o /tmp/test-c2a4ba.o -x c test.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'Post-RA pseudo instruction expansion pass' on function '@func'
 #0 0x000055ebe942b4f0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/andrew/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
 #1 0x000055ebe942b903 PrintStackTraceSignalHandler(void*) /home/andrew/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x000055ebe9428db7 llvm::sys::RunSignalHandlers() /home/andrew/llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x000055ebe942adcd SignalHandler(int) /home/andrew/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fb2f06aaae0 (/usr/lib/libc.so.6+0x3cae0)
 #5 0x00007fb2f0702e44 (/usr/lib/libc.so.6+0x94e44)
 #6 0x00007fb2f06aaa30 raise (/usr/lib/libc.so.6+0x3ca30)
 #7 0x00007fb2f06924c3 abort (/usr/lib/libc.so.6+0x244c3)
 #8 0x00007fb2f06923df (/usr/lib/libc.so.6+0x243df)
 #9 0x00007fb2f06a2c67 (/usr/lib/libc.so.6+0x34c67)
#10 0x000055ebe7960a36 llvm::MipsSEInstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, llvm::DebugLoc const&, llvm::MCRegister, llvm::MCRegister, bool) const /home/andrew/llvm-project/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp:174:36
#11 0x000055ebe831d21d llvm::TargetInstrInfo::lowerCopy(llvm::MachineInstr*, llvm::TargetRegisterInfo const*) const /home/andrew/llvm-project/llvm/lib/CodeGen/TargetInstrInfo.cpp:825:14
#12 0x000055ebe857ab57 (anonymous namespace)::ExpandPostRA::runOnMachineFunction(llvm::MachineFunction&) /home/andrew/llvm-project/llvm/lib/CodeGen/ExpandPostRAPseudos.cpp:149:20
#13 0x000055ebe8150408 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/andrew/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:94:33
#14 0x000055ebe8bced2d llvm::FPPassManager::runOnFunction(llvm::Function&) /home/andrew/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1442:20
#15 0x000055ebe8bceffe llvm::FPPassManager::runOnModule(llvm::Module&) /home/andrew/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1488:13
#16 0x000055ebe8bcf44a (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/andrew/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1557:20
#17 0x000055ebe8bca025 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/andrew/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:542:13
#18 0x000055ebe8bcfd1d llvm::legacy::PassManager::run(llvm::Module&) /home/andrew/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1685:1
#19 0x000055ebea30ef57 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) /home/andrew/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1158:3
#20 0x000055ebea30f167 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/andrew/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1182:7
#21 0x000055ebea3102c6 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>>, clang::BackendConsumer*) /home/andrew/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1341:25
#22 0x000055ebea457b95 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/andrew/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:354:20
#23 0x000055ebedcd77ca clang::ParseAST(clang::Sema&, bool, bool) /home/andrew/llvm-project/clang/lib/Parse/ParseAST.cpp:183:14
#24 0x000055ebea9df846 clang::ASTFrontendAction::ExecuteAction() /home/andrew/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1192:11
#25 0x000055ebea45bfc4 clang::CodeGenAction::ExecuteAction() /home/andrew/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1145:5
#26 0x000055ebea9df140 clang::FrontendAction::Execute() /home/andrew/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1082:38
#27 0x000055ebea8f11e0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/andrew/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1061:42
#28 0x000055ebeab9a188 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/andrew/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:38
#29 0x000055ebe78ff652 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/andrew/llvm-project/clang/tools/driver/cc1_main.cpp:283:40
#30 0x000055ebe78f0c6f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/andrew/llvm-project/clang/tools/driver/driver.cpp:215:20
#31 0x000055ebe78f11a7 clang_main(int, char**, llvm::ToolContext const&) /home/andrew/llvm-project/clang/tools/driver/driver.cpp:256:26
#32 0x000055ebe792b05a main /home/andrew/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:17:20
#33 0x00007fb2f0693c88 (/usr/lib/libc.so.6+0x25c88)
#34 0x00007fb2f0693d4c __libc_start_main (/usr/lib/libc.so.6+0x25d4c)
#35 0x000055ebe78f0025 _start (/home/andrew/llvm-project/build/bin/clang-19+0x78f7025)
clang: error: unable to execute command: Aborted
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 19.0.0git (git@github.com:llvm/llvm-project.git 594989918bf9e178f3b7c5e200d700d0574f15ec)
Target: mips-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/andrew/llvm-project/build/bin
Build config: +unoptimized, +assertions
```

Example file:
```c
void func(const char* x, ...) {}

```

This crash does not happen when using the n32/n64 ABIs, only the default o32 ABI
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWltvpLqW_jXkxaIE5v6Qh0olNTvSbnWUZM88RsZeUD4NNmObXObXj2wgBXR1J-neOdo6UVRFGXv5W_flC9Ga1wLg3EsuvOTyjPTmINU5bwkRTMHTWSnZy_n_HEAgKtuON1zUiIgX9EgUJ4xTVPWCGi4FeuLmgGRnnzXy0sA3RNVgUMs77Tdc9M9-LXrkt0TRgxdd2vbISwMP7xBtiKjRE28aRBXRB0QEQ52SrKeAzAFQJZtGPtnJS0K_GUUoeNHWCy69YPpMg_Hf_XQU_bDwoi3y8P4gW_DwfmDKw_umeWz9Tsl_ATXjT_vFSw_v7x1uD--_8E6PX3dX10IbdS0quaFd50XbMMOW9iNXpicNepScIUcm2nrRdjVmaKSye7k5vOhbqD2czzoTeuACLojm9KKR9JuHUyuVn_VwzdyAIkYqJ0IptJkNuYSyr_-U9Htau1uouTagftZeStl4uBjIWka3WoNyivbS4GtHkSOcIg_jHRFCGmTZQ2qkoT2MPZyhivAG2GZQys2fV9u7K6T7suUGEVT2NVLQSWWQkehgTKctFrz38L7m5tCXGyrbmX6WWuNa92A15MyFC9r0bDCXwYiOpoJ3qFPQKUlBa2BIy14NzXYk0VpSTgwwpHqBNFW8MyPkO0PoN8T6tnu1t2CDbpSsFWkRUXXfgjD6fWZW9rxh9psLD-8nE0U-pSHyjeJdA4O79OKbkE9i7jbQcuPL8l_It2AYV4j4yGdck7IBv1IAyKcNEOUTbfwSKqnAtxIAwazTceFXvAFfkBaQAW02FPmtgkZSYtXqt5JBgzpOkd9x6jfwCA0Khx9c-x0H5LeVIi34neTC2kl0SZoG-VVLzMEHpYREflV1PpXCyt140aUUyK-E9JXsBeOi9m1f5LfOrlRPjVQ-aTjRoNEYMXza9U4M0WtLBcT0CpAvJCk5JU2jv3vn4Yuqe34-1S6kZEx3CurXt6TkSEbYstRIMvw-EMWQz6zj1KB80wsuai-6rFmJ_Mq1-0MUHCTGuBXBh9SO_IrKR1Ckht8npWCwYzv6A9Y3RDlnfR7eW_tz2hSk8bl-0Qba3yBm3XJ0xJNke63sKElJc7IrPNsHOh_yrk4D3deuFSglld9wG2gsi1Uteuo_gtJcCi-6jDd4EyK_0t9450umfHoA-s3nwq_bymmpkcpnnNRCasOpRn5FGFOa18iXdkbTdvYTtPEpJnFJNhL5z4iOzjXEinCD3J8X7UBWXnSFOqI0KEQMso4pK2S9cuiMx847yQDVIGxwt2jdy2h8edsLa5aoI1ojD2f7Kf_e2IYvRJDaRvAMSYFayfrGekA2YsLZGNbiH1C7kdr4t1vUaeiZRHx0UksfnjsirPRc53GG1-zv4cyLA_vTPrk5kIejAAXPQRAESQIlFDEu4yqY5Rz9ooeHG8WFcbH2fgjYs_SoyNOD1EYBacdkxoWxuemDef2u72yq8fD-L8GfbQOvBWn0hgvqRdsMR160xfgIPlyDL4IIrZAONP4ggjVW7LmtAzy8_QR4RW6rjiM6vEKXszI7JdrbXixAag_nvwVvwjXWQUFixRYcgUUrYIRRhtZy-hQVxmG0lFE8QsmqEldBSgiBADn-p0DkyDa8pBstN6mHL4LniBIIPFwcySQLMlmAIY7fJFPEEMcLMul3aKIAKcI1vAdTtMSULYkVOKYRIqWtpd4ihuOYRgti-ZpYxKp3kIlYtSBTrBjENM3eZi2mafZKxrrdImhkRRqQKP302trRu-itfV5PZXW0O93NEqhIo8GLrpbEpqp7rJv_htr7s1YvsRdto_Qo9EWwy6OQ4XC-oBnIroTeyCdQO9m9nBL5KKntktOBzsStJTWJavvLLNt8-V8gXplfM5tjG6LC-MjsInbmSUbKxBkqEVK8tLLXyJbJunOpqBiQX9n8x2yCvN2OiakXX8XI7ZSGT0ni-C79hZh35G6O4MYl6NcgHBezIGw5XAThPEyCOMi_N_oJma0dZjydZObv4uLE1CMXhbPJ6MhEvGCipMDw3Cb3N3bwVPJ8KvzrWw_v_4Sa0JfZnK_Sj_FK_MkaeVXBO5B_cQXb0obGpk9AnbuKYibvdIW6imPyllt8-SewkiTZSgHZihUS4GSmgMZRGmvPI73rtmteefj3YE-c7cy1kK-1wBaR-AfQ_82wwzRPjrWWhV3MYZMogOodMbXlZqs1tGXz8gc03cTGbS9swKhB3PAOGi6sIQ2LTPf-YtjX2I4evUPasOFNL_j_9vDQmWX2tmuI7klxAw_TSmI2iEFF-sY8MGjAwBsDoyuX9dP3THsvZfO1N11v9naV9845V6OOE75HhdNSfB12R5H9ZXgzqTBMbAA4Wh4OViqswvSXVThv_8cpb9xxXuDZSaH7FtS7V28fkXRunTw7SjpcSjoMME3nmKz0RjqDJSxFeHncl7gStXOPdMXVH0AYqDsgih6-jrvy86J01nWE_kavobZ6o9OfRNSnuhx1cmcUF_UtVKsKeAxU29PKORrLcci1MKrX_BFuodoJc7OymsdqLGmsE925jaJR9__59hbFoc2HydHgFhUviZOsLJKfgRpsyC3X7xURetin_EvwlSVu7-53Uhh4Nr8docanQdUjJ1ESLxM7XhS2jLIso2TOyA1RGrZ390uYd9CS0RSH1dVxlfVRwG6C6Xt7dz_JPI-Wiwy8qF5Jwao8Xvj49u5-r6zsXs17XGcA7Q1MFv_OvZolxonu7HEh1jAsXNVxTN84WRlIWdH4RJD4u5H-XP1hGNsqY2bH6VqoYRzMYf5Eop8ly8AF9yg_glwUnySvwhCCpSzbjjd2-asNEcNR5vfi_DFXv-ZpM0bWAF5ZSW3ciPGRlUUxSsqChHm-SFQD6CPBx_E8acnAdxz_WtCbWLh3vrv_4eQjPzgPVppZFKlZXlVpghGl4UNL-LJy3ipFXmyainb0QNRxl2KM54s2vEMf2viduDJSNtrDe6b4o80E-wnKKwM2qMTH8LfcUM_yKqBphSY57MJBMDM27lrSNP8N1MhxcXOCm1WGtjTGmD7L4b_F1vAwMRUmy5i-3GjPrL-QbDCySS9uu3iQuhPyelfpsyEnqf08bpctd9-zApdBQpAF-4Gzs2nOH1uDOyFeIAlXC93X3fZp6zaief721m1C83y-57reKS8iFlP08GCHPWhDlHkYmXuLMIvpgnCyNli7EB9IjtR-6dDczZblVRbg5HW-KeAgd_pnH3pBygaQkQgGH0FUti0RzF1pKKUywH40driUUo0hZxo43mhArHdktTuAsJz0GpD_6NoAEJ8Fwjk6NB5BorDYBJug5k4KNTdeHMyuPETbE1ceNrZ3UsRFXhRhXlYFhFleRWVGE8BBwLIgYEGSxVWYwFEJ44ZwtP3B1YKx10EBYchdArB9O6n58_DKxeymAXbJ1cfvOTgSF7bBembF64HERS9kZ3jL_w-Y9WUPX5Dphok-eaNn-Lx6Jm3XwHBqGq3v_oynru4yznAWmQ87ymPgQM92rs1m44JDduFllz-5QzRJhuvxQgmToJGQBh1I14FATwcQqNdc1O7WiYiwh_cijdH24lrbmaRoXtyrcdHgrhxsL67P2HnEiqggZ3AeZjjI4yIIorPDOSNJVIYJxiwvwxwXcYTDMksrFidZGhdwxs9xgOMgC6MgidI42kBMoyROgZUkL_Iy9eIAWsKbjdXJRqr6zF2TOS_yLEzPGlJCo91tL4zHuIO95PJMnTsdln2tvThouDb6SMFw08D5ztmvkwTogffZnbBTN8IO3Pqesz_bx93pOOtVc_7rV30GNh7P8f8HAAD__70COBE">