<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">