<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113403>113403</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-20 crashed with speculative_load_hardening attribute at -O3 level. Assertion `OpRC->hasSuperClassEq(&X86::GR64RegClass) && "Not a supported register class for address hardening!"' failed.
</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-20 crashed with ```speculative_load_hardening``` attribute at ```-O3``` level.
Compiler explorer: https://godbolt.org/z/6xeTYYEee
```
$cat mutant.c
char a;
int __attribute__((speculative_load_hardening)) b(char *c) {
switch (*c)
case 'c':
a = ' ';
}
Also crashed on clang-19.
$clang-19 -O3 -m16 mutant.c
mutant.c:6:1: warning: non-void function does not return a value [-Wreturn-type]
6 | }
| ^
clang-19: /home/compiler/llvm/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp:1729: void (anonymous namespace)::X86SpeculativeLoadHardeningPass::hardenLoadAddr(MachineInstr &, MachineOperand &, MachineOperand &, SmallDenseMap<unsigned int, unsigned int, 32> &): Assertion `OpRC->hasSuperClassEq(&X86::GR64RegClass) && "Not a supported register class for address hardening!"' 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/software/llvm-trunk-eed7c5e/bin/clang-19 -cc1 -triple i386-unknown-linux-code16 -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -main-file-name mutant.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu pentium4 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/code/reduce -fcoverage-compilation-dir=/home/code/reduce -resource-dir /home/software/llvm-trunk-eed7c5e/lib/clang/19 -internal-isystem /home/software/llvm-trunk-eed7c5e/lib/clang/19/include -internal-isystem /usr/local/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -vectorize-loops -vectorize-slp -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/mutant-1e73ae.o -x 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 'X86 speculative load hardening' on function '@b'
#0 0x00007f1a2a6bd617 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0xffc617)
#1 0x00007f1a2a6b9b92 llvm::sys::RunSignalHandlers() (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0xff8b92)
#2 0x00007f1a2a6bdd91 SignalHandler(int) Signals.cpp:0:0
#3 0x00007f1a291a1520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f1a291f59fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f1a291a1476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f1a291877f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007f1a2918771b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007f1a29198e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x00007f1a31d55ae8 (anonymous namespace)::X86SpeculativeLoadHardeningPass::hardenLoadAddr(llvm::MachineInstr&, llvm::MachineOperand&, llvm::MachineOperand&, llvm::SmallDenseMap<unsigned int, unsigned int, 32u, llvm::DenseMapInfo<unsigned int, void>, llvm::detail::DenseMapPair<unsigned int, unsigned int>>&) X86SpeculativeLoadHardening.cpp:0:0
#10 0x00007f1a31d4b733 (anonymous namespace)::X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(llvm::MachineFunction&) X86SpeculativeLoadHardening.cpp:0:0
#11 0x00007f1a31d44084 (anonymous namespace)::X86SpeculativeLoadHardeningPass::runOnMachineFunction(llvm::MachineFunction&) X86SpeculativeLoadHardening.cpp:0:0
#12 0x00007f1a2b0ec6dc llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0x1a2b6dc)
#13 0x00007f1a2aa14a4b llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0x1353a4b)
#14 0x00007f1a2aa219b1 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0x13609b1)
#15 0x00007f1a2aa15814 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libLLVM.so.19.0git+0x1354814)
#16 0x00007f1a467c71eb 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/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0x36e81eb)
#17 0x00007f1a46f09e72 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0x3e2ae72)
#18 0x00007f1a43f3a09e clang::ParseAST(clang::Sema&, bool, bool) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0xe5b09e)
#19 0x00007f1a48822ed5 clang::FrontendAction::Execute() (/home/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0x5743ed5)
#20 0x00007f1a486dbcbb clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0x55fccbb)
#21 0x00007f1a48923fd1 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/software/llvm-trunk-eed7c5e/bin/../lib/libclang-cpp.so.19.0git+0x5844fd1)
#22 0x000055d6601a41bf cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/software/llvm-trunk-eed7c5e/bin/clang-19+0x1d1bf)
#23 0x000055d660199a94 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#24 0x000055d6601982b5 clang_main(int, char**, llvm::ToolContext const&) (/home/software/llvm-trunk-eed7c5e/bin/clang-19+0x112b5)
#25 0x000055d6601c0e25 main (/home/software/llvm-trunk-eed7c5e/bin/clang-19+0x39e25)
#26 0x00007f1a29188d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x00007f1a29188e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x000055d6601956d5 _start (/home/software/llvm-trunk-eed7c5e/bin/clang-19+0xe6d5)
clang: error: unable to execute command: Aborted (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 19.0.0git (https://github.com/llvm/llvm-project.git eed7c5e29c1dc5f78bd01608430e2b4e0c439bb1)
Target: i386-unknown-linux-code16
Thread model: posix
InstalledDir: /home/software/llvm-trunk-eed7c5e/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/mutant-df05d2.c
clang: note: diagnostic msg: /tmp/mutant-df05d2.sh
clang: note: diagnostic msg:
********************
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWttu2zrWfhrlhqAhUeeLXDh23BZoJ0GS2XvmyqDIJZlTidSQVJLO0_8gJR_kJt1NDz92kcYxD4vfR66TuESNEY0EuAzSqyBdX9DB7pS-FLSjUskvnRoMMxeV4l8uWUtlg0mImKZmBxw9CbtDQRaOP6YHNrTUikfYtory7Y5qDlLI5jAEUWu1qAYLiNrjTHwTH4e08AjtIgjXQbgcf69U14sWNILnvlUadBAv0c7a3gTxMiCbgGwaxSvV2oXSTUA2_wvIJnuGh3__-xrgVNJhlekrSRi1qBsslXbBxka2oxrRIL4avwpp0XZ7wL3dBqQISPENsqQMSImqgBReVECWzDUE-SQRIfMkLNshL8l3Th2MGkAByVlAckdtGo4QRUG8dj3I90yCgnx9Sm7ZGnU4GiXReFxROdtLR3lqR_gmRriLsrMNOHyLl1kQLyO3209Ue27xEkkl8aMSHNWDZFYoibgCg6SySIMdtEQUPdJ2ABSkV_jPsQ3bLz0E6fpIKUNBvkIHCuO39Ho6gwmiWy8gm53qICAbNulBQDZt-9idfIgqIJsHqhuwAdn8q8jG3_fHQ_qoKH-_P6IF63vHLCd-Bc8mIMVB4ZGkHZieMgj8iCBefkPaLTVmHDTqgOtccq4DUnyibCckfJDGOkXIArJCU9tND5pK_u3W-4627RqkgU-0D-LVIL2xciSkdf3n32MSxNfjZM9saQxof0ZBFt70dyscxNc7au6HHvSqpcZc_9drYeb2zHN4d5cld9D4Tq-2TliGAkL-oSyiyAx9r7QFjjQ0wljQTtGMQbXSiHKuwRh0YgxRQIhT3JqKFviki7cfr5f318gMVSec0GpokAYnF1l1btrC7oZqwVQ3P3fca_UfYO7AhTEDmIBskNs7IVk7cEB2B6M5oIqyz1b741yhXkOvFQNjgCOjBj02u5nUGMUE9eQGiQzTorcT5HtL2WfEh64_WGa4QP7frVaNph2iuhk6kNbM1dao2j5RDXvcVg_yMwbgOUtdYyWkU-6DVTIWIWy16FtAIi4yPMjPUj1J3Ao5PGOmOEQZwtAJi1X1H4QdKC40ohhhLgytWsC1BkCYtUA1psbiCmqlAbudAMkR7qiQuBYtYKfrBw-AcKehVYw6pcGd4tCiXjCEe8Gw98yIjF-Ewb0AhLta0w5wr4S0zjOvpZKAcN1Ru8OgtVQI13WPmZLuCGwQr5VEuJYKazVILmSD3ViEO6acnQzMKo1pK6gBg3A9yCchObaOlgniNUHYekvHrB9QD9KKoUsQtoME39SABO0wc6iGpgHturzzWje8Qrj27Xj0JiNRLhzyU0_D3YcGPjBHhqlH0LSBt0zSMCqXG_cGbRh9mdeGgGycPviNlbTFwnwxFrqfEOZsZbKOF8UOxjtXxWj74lB4dn-w0ynfNWiUexjq4k4NWiuNW-E8gKNZN3Jg-BG0EUoG8TpZkEWEcG0-ix4rrjHbAfuMhcRNV_szaZXGXNBGKmMFMwg_gtMd8T_ArVL9rMG0PcK1809GNAivt9t3q9X2_fKP6-36z-XdhmxXmw_b5f2nIF5HCCuH2nZ9QDajaeAI8pjCQiH8jNhZxIwmRxDEK1C1c8E91Qa0S3KctakaOVMbB5Np8EpxGHXVq9PYGU-dd4N0Kot651kDkm_2sdYFG_SJStq4OJi7ON8pPrQ-bzigIvnktZJX5P2ryNBJCoNcCnPqtb3gQ4B3SUcSVu5jCtYkDlH4HIZhmNcRJTSreBblyLtnH0bMlykm3mohrXeeD6MHLo6DNH3aKmM10G4KeD6OlWNm9Db_uVgc9L0V1cePf3xaGLWIykXYCBuQq_C5rlkW5cdsKyBxdEairEryEom7Qd6LRtL2PZW8BW08wN-Gs6hKMsNJzjeblxGaIQpIMe3d2GymHCf0_w-C4lNBZUSjlIQTixHTc5Fts2QKNY0cxg7mMGYeXUJSEs7AJXOZdVrWDPV2p4Hy7WfRtm9boMzKms0WSM9BJ3mGGuN5vhV8kmcz2dlcdpHndYxo5TKRN0kmRV7HM8n5V5Kj6s0yo2oms5jLLAsos7fJjEso5ztQnsiMI56mFIrfkw0fDes0L54s_6vOKRV-a_fbU-ZhLmA_94Os1Qvz3cNCEF_P53CwVLTz-bfU5QffXj--9qLcgaC_fl45sWXnu8L5wSVVHse_5OB8qnyrgd9bauFhp9XQ7K5axT6bpZwmvHSc-yD1o4SiM0JJWCS_hJAe5I38CuSvJzBz01UILOPsa83dr3KG70VgZ4h-S7xxWDN-dLmOySxOUBolNKlOmGxuHfh9GvJ34BCnMU2qGYdkzoFEZRV9B4dPPp2aq8fU9DvxZ2FZRTP86dkZpEWUnOBvoaHsy5RkHZl86Pr2wOb_nUWaFFEyY3EaYJMsZ3kE1Xg1NaK67oS9Gp9KbwbbDzYgxUn3-pjfX8tGSJgc_smQ90A56Hugmu1ueqdpBvlHya-Hupz7Hci_GDVeJP3FoI9UNi8NOYlEVgvZ3EF9Fr-mY1ieCZw2YTnZyumUD9LqwYhHuIN6Je2tdYHl2P1YT35kI1q49w9dU4Qylo89gxT_HWDbn810CXj_pIWF7T4NP5nEoaZDa7ccWrDwFxOnUPYSpZWSZuhcjrr8Jao3XpWwvj_XvziDIoK5F8hn-leHJeTkWxhHlfJJ9YOm0owP-_-U4kwxl_cPKyUtPNtfZVGv0wJCISczWqeZYBLXMQ1LOKV16x5Al_cPc9D30NFJTyul2uPn74QPaRWWMEN_mnMmRUEI8PQU_Ua7rT0Yw-gonoENFn7Vk9ercNM8iYGnp3hJOMOb8YpV1dyvjDfTLqGlksEM8d6ii9cJ_m4NStOasWpmGCSacSpJXPNo5phH9Edqj9O14JzJV9R_t5GnRZLUfBYqyT7xSlOeZWFEk6iqEWPRtqNiHgSXWtMvzifHK1-dmVz3cu-8Zm37dP-HKR3qGD468qiqZ7DjOeyypGWC9vu-ih68aRZnzzZ_-DutMcy_wOEsCDkZk586CVMl4lo8gn4xjSXJGayCVJN17vdzepZxq_vNWX7foj-9gxGp5oaZzqGyEEiKHMifXisugczXOr8qKHj5xrsTUvIynMk8vyQoIAnRduumbY2l2m5PyHz3KpDMVynODjTNeIpG-T-9T5Cd-Mq9X0D-ctf9MUhatYCsQjDqNWKq69yDe7xEy2qsJDmPojT46grwb0jzLaienOde1FRbQnzwCx0vhgYDCD_6NgAkTjzY6QpounNGzst4P-Pmvq0ItXCzpn0iJYs4S-u8qHgYZWGRxCGQKoGQJXFZnWT5U8UyXr5e55kG-ss05OsxbnivjHgeu7zfbVvga6HfXnfyIq4G0brNlLVoRhFXdF84NGdHIZXLBJfoeO-OOjPOmtTtJ35O6tRThXD58LBcvUcP76_R5ubjx5s_P_zjHdp8-Hh9jx5ufPPVP9-hu-vbm7uHQ13u9qUKX-Grma9W-Q4DNCBf_wKOqD2I_B7-ZwUDXocpJ4e3Cn5YgNm99Qh-1UHsX5a44JcxL-OSXsBllJMyS8M4iy92l3We5nnM87SusjqrKgIuNcrymAOpMlpeiEsSkiQKSRwSkoXxok5IGFURSRmJoQQeJCF0VLQLp6ELpZsLX8u9jKI4CeOLllbQGv9qCiESnpDvDQgJ0vWFvvRqXQ2NCZKwFcaaoxgrbAuvvLHy-rsb8_dT8E08vY3yNyykXwy6vfzxSvm0wY-X5P8CAAD___C5F_g">