SixWeining added inline comments.

================
Comment at: clang/lib/CodeGen/Targets/RISCV.cpp:178
       return false;
-    if (isEmptyRecord(getContext(), Ty, true))
+    if (isEmptyRecord(getContext(), Ty, true, true))
       return true;
----------------
asb wrote:
> rogfer01 wrote:
> > I've observed (based on manually added tracing) that we may return true 
> > here with `Field1Ty == nullptr` and `Field2Ty == nullptr`.
> > 
> > Then `RISCVABIInfo::coerceAndExpandFPCCEligibleStruct` receives these two 
> > types and appends `Field1Ty` it into `UnpaddedCoerceElts` and then if 
> > `Field2Ty == nullptr` it calls `ABIArgInfo::getCoerceAndExpand` (around 
> > line 280 of `clang/lib/CodeGen/Targets/RISCV.cpp`) which then tries to do a 
> > `dyn_cast` on a null value and then an assertion fires (around line 256 of 
> > `clang/include/clang/CodeGen/CGFunctionInfo.h`)
> > 
> > I can reproduce this with the llvm-testsuite. Apologies that I have not 
> > managed to create a small reproducer yet.
> Thank you, I've reverted until this can be investigated and fixed.
LoongArch has the same issue and I write a reproducer:
```
$ cat test.cpp
#include <algorithm>
#include <vector>

static bool check(int i) {
  return i == 2;
}

int main()
{
  std::vector<int> v{1, 2, 3, 2, 2};
  //return std::count_if(v.begin(), v.end(), check); // ok
  return std::count_if(v.begin(), v.end(), [](int i) { return i == 2; }); // 
error
}
```

Let's investigate how to fix it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D142327/new/

https://reviews.llvm.org/D142327

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to