<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129995>129995</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] Crash in `detectVLSCCEligibleStruct`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
michalt
</td>
</tr>
</table>
<pre>
We found a crash when compiling internal code; creduced repro:
```
> cat galois_field-d4307d.cpp
struct a {
using b = char __attribute__((vector_size(sizeof(char))));
};
class c {
using d = a::b;
d e;
public:
static c f();
};
class g {
public:
template <class h> g(h);
friend g operator^(g, g) { c::f; }
friend g operator^=(g i, g j) { i ^ j; }
};
template <typename, int> using k = g;
template <typename l> using m = k<l, sizeof(l)>;
void n() {
void o();
m<char> p = o ^= p;
}
```
Results in:
```
clang "-cc1" "-triple" "riscv64-unknown-linux-musl" "-emit-obj" "-target-cpu" "generic-rv64" "-target-feature" "+m" "-target-feature" "+a" "-target-feature" "+f" "-target-feature" "+d" "-target-feature" "+c" "-target-feature" "+v" "-target-feature" "-b" "-target-feature" "-e" "-target-feature" "-h" "-target-abi" "lp64d" "-O1" "-std=gnu++20" "-x" "c++" "galois_field-d4307d.cpp"
galois_field-d4307d.cpp:14:30: warning: expression result unused [-Wunused-value]
14 | friend g operator^(g, g) { c::f; }
| ^~~~
galois_field-d4307d.cpp:14:36: warning: non-void function does not return a value [-Wreturn-type]
14 | friend g operator^(g, g) { c::f; }
| ^
galois_field-d4307d.cpp:15:42: warning: non-void function does not return a value [-Wreturn-type]
15 | friend g operator^=(g i, g j) { i ^ j; }
| ^
galois_field-d4307d.cpp:21:20: warning: variable 'p' is uninitialized when used within its own initialization [-Wuninitialized]
21 | m<char> p = o ^= p;
| ~ ^
F0000 00:00:1741242680.668504 1430842 logging.cc:62] assert.h assertion failed at llvm/include/llvm/Support/MathExtras.h:405 in T llvm::divideCeil(U, V) [U = unsigned int, V = unsigned int, T = unsigned int]: Denominator && "Division by zero"
*** Check failure stack trace: ***
@ 0x5610c7648dd9 absl::log_internal::LogMessage::PrepareToDie()
@ 0x5610c7648377 absl::log_internal::LogMessage::SendToLog()
@ 0x5610c764832b absl::log_internal::LogMessage::Flush()
@ 0x5610bcc4cb45 absl::log_internal::Voidify::operator&&<>()
@ 0x5610c7567eaa __assert_fail
@ 0x5610b7bc02c1 llvm::divideCeil<>()
@ 0x5610b8f571de (anonymous namespace)::RISCVABIInfo::detectVLSCCEligibleStruct()
@ 0x5610b8f55fe4 (anonymous namespace)::RISCVABIInfo::classifyArgumentType()
@ 0x5610b8f559b6 (anonymous namespace)::RISCVABIInfo::classifyReturnType()
@ 0x5610b8f54d81 (anonymous namespace)::RISCVABIInfo::computeInfo()
@ 0x5610b7b3d914 clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo()
@ 0x5610b7b3df6d arrangeLLVMFunctionInfo()
@ 0x5610b7b3dd3e clang::CodeGen::CodeGenTypes::arrangeFreeFunctionType()
@ 0x5610b8d5f20d clang::CodeGen::CodeGenTypes::ConvertFunctionTypeInternal()
@ 0x5610b8d5d789 clang::CodeGen::CodeGenTypes::ConvertType()
@ 0x5610b8a44f61 clang::CodeGen::CodeGenModule::GetAddrOfFunction()
@ 0x5610b7ce4ed5 clang::CodeGen::CodeGenModule::getRawFunctionPointer()
@ 0x5610b7c39cfb clang::CodeGen::CodeGenModule::getFunctionPointer()
@ 0x5610b7ce6b76 EmitFunctionDeclLValue()
@ 0x5610b7cd3ca9 clang::CodeGen::CodeGenFunction::EmitDeclRefLValue()
@ 0x5610b7cd02c6 clang::CodeGen::CodeGenFunction::EmitLValueHelper()
@ 0x5610b7d054ab clang::CodeGen::CodeGenFunction::EmitLValue()::$_0::operator()()
@ 0x5610b7d05428 llvm::function_ref<>::callback_fn<>()
@ 0x5610ba1c919c llvm::function_ref<>::operator()()
@ 0x5610be2b4133 clang::runWithSufficientStackSpace()
@ 0x5610be2b3f33 clang::StackExhaustionHandler::runWithSufficientStackSpace()
@ 0x5610b8a24a3d clang::CodeGen::CodeGenModule::runWithSufficientStackSpace()
@ 0x5610b7cbe553 clang::CodeGen::CodeGenFunction::EmitLValue()
@ 0x5610b7cbdf8d clang::CodeGen::CodeGenFunction::EmitIgnoredExpr()
@ 0x5610b80543f2 clang::CodeGen::CodeGenFunction::EmitStmt()
@ 0x5610b8062bf4 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope()
@ 0x5610b89ef9b4 clang::CodeGen::CodeGenFunction::EmitFunctionBody()
@ 0x5610b89f0fd8 clang::CodeGen::CodeGenFunction::GenerateCode()
@ 0x5610b8a41acc clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition()
@ 0x5610b8a319e1 clang::CodeGen::CodeGenModule::EmitGlobalDefinition()
@ 0x5610b8a1fa13 clang::CodeGen::CodeGenModule::EmitDeferred()
@ 0x5610b8a1fa83 clang::CodeGen::CodeGenModule::EmitDeferred()
@ 0x5610b8a18e1d clang::CodeGen::CodeGenModule::Release()
@ 0x5610b8e291f5 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit()
@ 0x5610b7b19135 clang::BackendConsumer::HandleTranslationUnit()
@ 0x5610ba606281 clang::ParseAST()
@ 0x5610b9fec3e3 clang::ASTFrontendAction::ExecuteAction()
@ 0x5610b7b1f40d clang::CodeGenAction::ExecuteAction()
@ 0x5610b9feb9eb clang::FrontendAction::Execute()
@ 0x5610b9e9d3cb clang::CompilerInstance::ExecuteAction()
@ 0x5610b7b0e405 clang::ExecuteCompilerInvocation()
@ 0x5610b7add5c6 cc1_main()
@ 0x5610b7acaf66 ExecuteCC1Tool()
@ 0x5610b7ac9773 clang_main()
@ 0x5610b7ac91cb main
@ 0x7ff9e62753d4 __libc_start_main
@ 0x5610b7ac90aa _start
PLEASE submit a bug report to http://go/clang-crash-bug and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang -cc1 -triple riscv64-unknown-linux-musl -emit-obj -target-cpu generic-rv64 -target-feature +m -target-feature +a -target-feature +f -target-feature +d -target-feature +c -target-feature +v -target-feature -b -target-feature -e -target-feature -h -target-abi lp64d -O1 -std=gnu++20 -x c++ galois_field-d4307d.cpp
1. <eof> parser at end of file
2. Per-file LLVM IR generation
3. galois_field-d4307d.cpp:14:12: Generating code for declaration 'operator^'
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0WV1T4zoP_jXmRlMmcb6aCy5KC_syw87ZAc6ey45jK6mX1M44ToFzsb_9HTtpKaUfwJllOiWVpUeSJcuKzdpWVgrxgiSXJJmdsc4utLlYSr5gtT0rtHi5-Aeh1J0SwIAb1i7gaYEKuF42spaqAqksGsVq4FogiS6BGxQdRwEGG6NJNCGB_6TB8AkmJLoCzixUrNaynZcSazEScRRk4pw3DQkmrTUdt8CAZJckmAB0rVNWAIlmwBfMwHzOrDWy6CzO54SOCR2vkFtt5q38Fwkdu3-6JHTs2AnNXz-RgyTZrH_gNWtb4DuahNfEnPnRpOg5AQTgIB1Mmq6oJe_9A2gts5IDh9Lbsl9JNSh5I2px2dTMIpBo2rMt3PxUhI4XGyCA0khUAirQDRpmtSHJFaHjitCp480dNPDe3tLFwek-KBjNnCxILw2_1vISSHIFv17FNw5sW2lfGlRsiU5YKuus7Sft0U9adVgC6lfmpWd-JNG0dkCbcNXe6aseZKWlANVP6SZCnqi35xlg6WbPBTq6gsYja-gdheY1FjtpGEzusO1q24JUexOV10xVQCgdcR4SSv2jNbKpcfhlZMtXaTzq1KPST2pUS9U9j5ZdW6_ZcSntSBe_NuLMVGhHvOkGSoUKjeQjs0rjHaYSme3MWhehl8tTDOwUQ3mKQZxi4KcYVkcZRsXxYTw-vNgZZoUcKHWTxhvj_9qEq7WCRLNKdYReEnpJg_XA8_DA-4F1NA7UJEpJMDk0GE3CmESTKCDRBJ6YUVJV7hGfG4NtK7UC4zMNOtW1KIAkl6N_-ufRitUdkqRfrRDGQLIp_IcF7_4cBEmufv_-_QGr0x2rlVYjv8bKTnHrjBcaW1DagkHbGQUMvNG9Gz1t5Nb4n_HiuAsJiSYx_QMuJMdc-GgB_ZAPNHRfu8mzYkayokYgNGsIzUC20CmppJWslv-i6Ldin09P0i6kAmlb0E8KNkzM-z5k25boxksaDl6eLqCvMXn9-71-6F28DoIggMB54r_CLA5pTNNxcJ6m4ySIIYyjYBxTqHVVSVWdcxf7lJJkBqxt0djzxfDgDC-ZrFEAs1DXqyWh11LxuhNI6PVAuO-aRhtL6PV3ZhdXz9aw9nzhUiJIQCp46CV9fgm5kgKnKGtCx3-7yP30cUsu__YOd8q3Q8Jvam50L_XhPTWZuXjNUOmlVC5DgNCU0NTVk5lcSV8Aihf4F43uCwmhwwemC-SP3tHOoGsj-CNYwzg6yA3bMP0kDvxsB89JGgY8S-OxEDmwoq17F2tdzdcdWU-51dV3bFtWYf_7h8GGGXzQM4nDFnoQO8qyT2HfoxIP-lZXJ4Fp8Sng67prF0dAC85jXsTJUdCfWgpZvvQ_NmvZB4pEU9dyHLM6STNkzLWdPjvnLmL7bckKHlAewv7M269pEB2XSRYKBCB0zJRWL0vdteA6p7ZxKeH6HYd3d3M__Tm5vLlRpR40oEVuf97eT6dXtaxkUeO976GPqEpKjL-gyjepsnyZmKpborIPrmputOxMhlOTF-l_UHPna_NbJe8nfVwmsRiHX1Cjl01n0ROO4GdFJPIwBt8R9pJTLfAbqjc_nJltT2HGMFXh7e3P79fDJrRXyZaCMhUAH5XbMU5E-Hnjrg3iWsneGV7PrkhKGgj4hIapVis0dhv9Zr0cDyaLSEQ2zr-g5qjxLI7LNDyJ-l2Lrh4Kzje0EyHMX-Xa_oNh4xijSD4FXqG9Y09r5B_al6mDk5LxKOdl8VkNH4fHtMhSgKul3AjNkNe3P31feiztuIg4y08ZtplCT3RqHPwdlgc0vKIHlKcn_X4P3-P-D-tm2-8ddBEkMSu-Cr5--XRUQuN5sLur-OFjuul4e4NYt6lzg-WwRfTVidV1wfjjvFTHdw4W8jzM-UcwTxi5FWCkRRxG0fYkmU79I-3ivitLySUqe-86lvu-yB5Fisq3SF7w6nnButZZ-T-mRI3m81o2q5zGLBKfWSVf0JLxApMk-nJSHsEV5fh0gX2Pe1MpbVBcPTcHc30cJHFU0i-A39vl4QYiSGlRntwR34NO9bLRnRIO3M2_7uw910fqd45lXsRfMH9NudTi5TB6GZRi_En0b6jcIkI3eGTfCRnnn8lIZ_S3Whesfq3EpX9tO7wDjVkU5vi57e1Vz0fww5KFp1N-F3-GJRqD4iju-I_gjjE8vZS2ce-wRtYejiTSPCyTk03sgNyX15tlM7x49KXtwTDV1v6F_G8lDy6rrAjzMHrbUFwy_ohKTLVqu-W6Rn4KlaVBSsdvk-QHMy1O7h-O1e28RB7hm7o9uX-4NlpZVGKyvd6ekXcWJ_u7pTfNaljGwb5C_SW4vMQixzcb-RHzjiJhLiK-0xIsG1mjuVGtZYrjp10NMA6SbcRB9hV4pTk7icOESHwrxMP5kkl1uJtjnJWp6-YGPdPwQev6ODjPs2wI8Q76fu6QFwCecZclK8scU5olkYhhPq9lweetZcbO97JvEAPGAHpOEkx-3F5N7q-g7YqltMCg6Cow2GhjwWpYWNv4ruua0OtKE3rtLR_526mR42VKwHBQBHaBw72Va6P6gxU6hcZfTnFsWxTQ6s70ZCfJ2lZzySwKMJ2ClhvZ2HMS9A0LiG7Z9HcFwXl_9PXD6MqwJbDhfdi9mfSzCSPOQxguDODwVQFsLglg63oAti8GYOc4HAi9XO4jsn3Ech9R7CPyfcTVO-KoeE_C96QFbB3Tgz-gh9FfIbw_lIfRMwwH8UeuBcNhykk0RV36o0pXxAwwC6gE6BJKWSMJJnQdHDQjRwL3Pg03d_2k9isumETnB5UNh-OhP1keirpUlb_mhFIbEMhrZoYDVpq9Od_Otu-RzsRFJPIoZ2d40R-IRmEanC0uYhGOKY0zmiVFWVKeliUTIS14GZUiYHgmL2hAkyAK0iCNchqcCxZjlsfJOIqCPBsHJA5wyWR97rr-c22qM9m2HV6ENM_z5KxmBdatv92lVOET-FFCKUlmZ-bCCbkF05I4qGVr21cYK23tr4X9gQlJZjD1i0gqIGlw-LApDc46U1-4Ndq-LlJpF11xzvXy9dzW626M_oXcEnrtDWsJvR4sX13Q_wcAAP__HKL3mg">