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

    <tr>
        <th>Summary</th>
        <td>
            [ARM] Crash "Can't get register for value!" with naked function returning large _BitInt
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:ARM,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    This code causes an UNREACHABLE crash for all 32-bit Arm targets at `-O0`:
```c
__attribute__((naked)) unsigned _BitInt(65) foo() {}
```

The crash occurs when the width of the `_BitInt` is > 64 bits.

```
$ /work/llvm/build/bin/clang --target=arm--none-eabi -march=armv7-a -c test.c -O0
Can't get register for value!
UNREACHABLE executed at /work/llvm/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:1957!
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: /work/llvm/build/bin/clang --target=arm--none-eabi -march=armv7-a -c test.c -O0
1.      <eof> parser at end of file
2.      Code generation
3. Running pass 'Function Pass Manager' on module 'test.c'.
4. Running pass 'ARM Instruction Selection' on function '@foo'
 #0 0x00005644cef4d517 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/build/bin/clang+0x4e87517)
 #1 0x00005644cef4b0fe llvm::sys::RunSignalHandlers() (/work/llvm/build/bin/clang+0x4e850fe)
 #2 0x00005644ceebc8c8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f94d0642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f94d06969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f94d06969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007f94d06969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007f94d0642476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007f94d06287f3 abort ./stdlib/abort.c:81:7
 #9 0x00005644ceec3391 (/work/llvm/build/bin/clang+0x4dfd391)
#10 0x00005644d0188b7e llvm::SelectionDAGBuilder::getValueImpl(llvm::Value const*) (/work/llvm/build/bin/clang+0x60c2b7e)
#11 0x00005644d0187550 llvm::SelectionDAGBuilder::getValue(llvm::Value const*) (/work/llvm/build/bin/clang+0x60c1550)
#12 0x00005644d017ca16 llvm::SelectionDAGBuilder::visitStore(llvm::StoreInst const&) (/work/llvm/build/bin/clang+0x60b6a16)
#13 0x00005644d017387c llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/work/llvm/build/bin/clang+0x60ad87c)
#14 0x00005644d0231fb6 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/work/llvm/build/bin/clang+0x616bfb6)
#15 0x00005644d02316fb llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/llvm/build/bin/clang+0x616b6fb)
#16 0x00005644d022e7c2 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x61687c2)
#17 0x00005644cdc32b31 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) ARMISelDAGToDAG.cpp:0:0
#18 0x00005644d022c1d6 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x61661d6)
#19 0x00005644ce449804 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x4383804)
#20 0x00005644cea263a9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x49603a9)
#21 0x00005644cea2e211 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/build/bin/clang+0x4968211)
#22 0x00005644cea26e00 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/build/bin/clang+0x4960e00)
#23 0x00005644cf762e8d 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*) (/work/llvm/build/bin/clang+0x569ce8d)
#24 0x00005644cf78a59d clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/llvm/build/bin/clang+0x56c459d)
#25 0x00005644d16edca7 clang::ParseAST(clang::Sema&, bool, bool) (/work/llvm/build/bin/clang+0x7627ca7)
#26 0x00005644cfc2a480 clang::FrontendAction::Execute() (/work/llvm/build/bin/clang+0x5b64480)
#27 0x00005644cfb9185f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/llvm/build/bin/clang+0x5acb85f)
#28 0x00005644cfd1aa57 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/llvm/build/bin/clang+0x5c54a57)
#29 0x00005644cd6ee216 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/llvm/build/bin/clang+0x3628216)
#30 0x00005644cd6ea8e1 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#31 0x00005644cf9ca909 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::$_1>(long) Job.cpp:0:0
#32 0x00005644ceebc60b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/llvm/build/bin/clang+0x4df660b)
#33 0x00005644cf9c9e70 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/work/llvm/build/bin/clang+0x5903e70)
#34 0x00005644cf983d38 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/llvm/build/bin/clang+0x58bdd38)
#35 0x00005644cf983ff7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/llvm/build/bin/clang+0x58bdff7)
#36 0x00005644cf9a5587 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/llvm/build/bin/clang+0x58df587)
#37 0x00005644cd6e9fee clang_main(int, char**, llvm::ToolContext const&) (/work/llvm/build/bin/clang+0x3623fee)
#38 0x00005644cd6fb3b7 main (/work/llvm/build/bin/clang+0x36353b7)
#39 0x00007f94d0629d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#40 0x00007f94d0629e40 call_init ./csu/../csu/libc-start.c:128:20
#41 0x00007f94d0629e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#42 0x00005644cd6e8125 _start (/work/llvm/build/bin/clang+0x3622125)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 20.0.0git (git@github.com:llvm/llvm-project.git c27c9dc144ecadfb71d39d55a601461ddc4509bd)
Target: arm-unknown-none-eabi
Thread model: posix
InstalledDir: /work/llvm/build/bin
Build config: +assertions
clang: note: diagnostic msg: 
********************

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

*******************
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWltT4zry_zTiRZWULd8feDCBzMwp5kAB5_wfU7LUTvTHkbOSzOXbb0l2EiuEYcLMnqqtnWIgkVrdP3W3ulsXqrVYSoBzlFyg5PKMdmbVqvNWGyolVfysavnr-cNKaMxaDpjRToPGVOK__ry7Kmdfy4vrK8wU1StctwrTpsERmVTC4FKtsaFqCUZjajBKg8lNgNIARSUKLlFQ2s_uh_XfFwtqjBJVZ2CxQCRHJJf0ETgiBSIF7qSDyvHiQphv0iCSp4ntqNvWURcYZRcouzzgPnx1vx9WMIBtGeuUxs8rkNisAD8Lbla4rd0XlAZbIWmAhcYousJpjCth9HTM71AIiTEi8-dWPSIyb5qnNSLzqhMNt3-FRGTOGiqXeDLpNYOiS6rWk4lsJUyAVgJP1lSxVd_-lE0onjBsQJspw1Z9TsyMSkQyg5dgsIKl0AaU0_4TbTpAJOzJxhaCF2CdAe4scYjQ_plsVPv_wMyoVVSIzGcthy9gkd9DA8yIVl6WXw6-XtgpgpqyzQZFZVgk2Q7E7fVVeX-FdVethcEUV90SK9i0ymDT4pUxG20dgswRmS-FWXXVlLXrd7EJrTvQiMwxlRwLyZqOg7NZb9aKskejKANEZnijYKNaBloDx7rtVN9sR1KtWyao1YjqJNZMiY0ZTHtvKHvEvFtvdq4aTLH7d6vapaJrTNWyW4M0Fvs_YfFwkI-iGbS19cYNVRqUNSdIbv22Fg30xGQgtqbDS5CgqLVT3xlN8V0npZBLvKFaY0SyeSedIfGtbfhOJV2CQiTDrcTrlncNWKoeEiLZoKX4LaPy7jv-JrVRXc9v5yIDs3orCJEMxYFbt1nPDSMSBTh4CYIgSNI4ZlDHPAkz7FQalSgq9avuP9wqIY0z0kNv6XxPpOjzotVGAV0jklprCxspCuwixMd2QuQieIkhz5Iws3FnBy48AFcFNRwDd9fJe7GUtPlKJW9A6W1oOk1-EtTgySeefKhYznI8sz5_B6x9AvXqiUUkHybu0cxaaeDFDAs1cP93IqJBRFYXMQ_SmCQkGHD3seAlTxdpPGmE7F4mS9n1HWyq22naA7dDPNixz7NIi5rhxWJjVgooXzyKplmI9aYBu5qcm-IpInO5MQ0i8zHZlKGojGMUlVm655_8DH9pQEna_JBzltvINdJGeozzeNgP2eXFAbvsULlxluKldjZznPqPiMyn7tur5rCxgW7TavGCyFxRocHxJhmKypEOcp81ybM6wrSyIdaxMrw3n2vq0YV2xnsOhe9cLIqK8DSP5TWPinBnertgxsuZB2GeV9l4xRzJH33HEszfNo99W28ab227VsxaqQ0i5amLKg0YqTLwIIYHELMkCU6B-HvhhUkSePCIDy9jNEx_Bt6T0MLcm1b5AF2Ljc9bkOnpIKuUhqkHMjoAGeUZ-2mQHr5x6vg8QsrzjHkIYw8hicK6ek-N3-6hGbdeUC3YRdOyRw-paIQ2C2FsZm3V4nlhC0MUzQ4pOBgqBoay5bBoN1aQTzqats1XRnWuSqlpo92Hp1bwccd-5AhddOWNcbR9238n6qptm8-YP0yruvIdNDk0f1pXP2n-smn2aLXnArui6dOeGqZVWlce1NSHSiBj5EOoqpM38jtlKyFhi8qD-qbvM1jzjBEPazbOGZxFpIpczqCyla_rttNY0jXojavQih5Jeff9svzy0P4O_OXdd8tjy-9tSWNB5gcKZSH_0dK_hiVlr_-kWtOQ-97qp-I4LvIgxu8KtRX7CO5RnL8AMI7yKA_iMUDiV-mUpBEtRgDntxbTdhPxH4RWpEFECw9aeAANSBj-BLTvbo_j23Zo-gysnIReIUTIocYgGFcZzcjpRgBd-bMF-dvABRB4NQYZp29WZymBnON-iBN2tRbmgrJHkPymM5vOpuxR96WgS9lqI5i-kkshYdh1jUi-AuWg7sHucm_6TDIKmh7pcNjwAdWD20h_QHRN5fIYybgcUkIu76D2m7faLQ8YDkoodylvnAuN6rR4gjuoZ9LcGuWlyqd6WKNz0cD9qzawHrKcNrzv6aT4VweLzcFIu5vdPCthYLHd044Gcahp19h83YCBDwZGV4PMt1OatVJ3a7tnPLlqTdKCQc49j4p9j8ppUvAfSe2dxG1bHxSVunHbwL-kOHC18v5h2L5-wvWTlMVJ4QP1CoMwBc5oNgZ6S5WG8v7Bh3EPazr4Ul-kbP-eBihLScZo5gFKPc0xQuM8GAOaKzv_nQ_267M_2PvEKUNSpXGc-9HAS-p1VYR5UvsLdL0RDShb_VHJwMOwXRr5-5A_YTjKqjypPZS5h5KHlCae4QY8e7BPLaNvsb2ZzCf8nyUxTXwrehmcpwAkTDFj4WJNhR_IS6Xoqw1A0YytqNrvHYeV6rXtauqTQUYpyYm_a_PP2ngKNIcQb_U2Cx-cR4_3jmvaNH8DM-2QmI4gPoivlsewYL0imSvxtDsr9us1_5StLhgtgsJNe8R3e4q4UE5zrrd3fxfkLAmjTVNR9riopUW6N3kvezD_LJy16zWV_HAlHbXQLuz2uyHaeAF3n0x2gXY3YLFgLy9h2H-p7H7CBmVhMTktesS2YWEU7bdmrvuAHW0a686tGvVbknIfipyL9Dp3QxCJF6EjypvWekWB_2ir4yZ4c9CYBuPt0rHjxP3JJ62hefU0-GNrnVrA8DpNA2_PFEUHLlNA5gXN_zmTnxbAiiCCzEsCkZ_AizziUf6uRl0MpW_y0VbNXsA9GGgJ3ivffkBaetn3U5POK86j3Jt0cjjpus5OnfQfbaXfn_EfbXUtvMM3rxp9E2B31t9QYQ3vzvN_XkmDi_wGVdW1l-Aiv0wpaJLk76rqcvTZS8tH8vF7Kv4HVXVi9s95neS-crKDxFrUAD2Qbf7fgnNhoBwW8cdp88SMH9XgnXVHuQ-srqIqwxbSiZyjJKr8KRcH9w8FLwK8WDSislGPKrOw-dhN311IMN29veYYLlKODZquUFQm7n4m3UmNg0OpEAfYjRFSmENB_UfLfeK4u2uQkFimZJ_84vAYU28qx2ZxlHmUFRb2njc58Iw8JAnuuZ5qXBKSZGeCrZdjUMpmiLJ3N1wPpTdmg7_XVDTA8bMwKwwvwvQvOsIotuI7DXjyhE2LNQAWo5J5LAY_gdKilZgE02AaLIWDvhQGxcHo9j4qj9zeTy01IxkrOAvjGBjldZWFPCp4ktA0COM05JzFSVBU-43aw3BrXmKq1pNOPsr2We5vz7fPOhRQjtctd4eKuL8zc12uuG8a4JdCfXhZ70a4Wwq79Gqx7EdcUK1B9WfgvsplazfeJea7YxC81v2owe6_8DN6ZzK8oigfHsrZV_zw9QrPb66vb_7v259f8Pzb9dU9frhxzRd_fcF3V7c3dw9o-3bh9tgriFzbmPLuS4gdgQLsSg_3cmTH8mfmT-ZmvbG_QZtJDlES5lP2a8P16lT1_6IR_Dc-Z_w84kVU0DM4DzNC8iTIc3K2OqeckbimWRoHQVqHRZpzqDNeRVFWcVqEZ-KcBCQO8iAJijgkZBryIidZTvK6yHOSxigOYE1FM7VOOW3V8sw9dDkPg7CIi7OGVtBo90aLkKo_P-mP0xEhiMwQIe75y6SVkyfa2F0iQcnlmTp3C7DqlhrFQSO00XsJRpjGvfuybJLL_qEARoR8_LyIkD6KuOdZ-2cdCkyn3IuQxq7a7UOts041559_6TPo4Omc_DsAAP__nfKdCA">