================
@@ -2940,18 +2940,28 @@ bool QualType::isBitwiseCloneableType(const ASTContext
&Context) const {
if (RD->mayInsertExtraPadding())
return false;
+ auto isCycleBackToRD = [RD](QualType T) {
+ return !T.isNull() && !T->containsErrors() &&
+ T.getCanonicalType()->getAsRecordDecl() == RD;
+ };
+
for (auto *const Field : RD->fields()) {
- if (!Field->getType().isBitwiseCloneableType(Context))
+ if (isCycleBackToRD(Field->getType()) ||
+ !Field->getType().isBitwiseCloneableType(Context))
return false;
}
if (const auto *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
- for (auto Base : CXXRD->bases())
- if (!Base.getType().isBitwiseCloneableType(Context))
+ for (auto Base : CXXRD->bases()) {
+ if (isCycleBackToRD(Base.getType()) ||
+ !Base.getType().isBitwiseCloneableType(Context))
return false;
- for (auto VBase : CXXRD->vbases())
- if (!VBase.getType().isBitwiseCloneableType(Context))
+ }
+ for (auto VBase : CXXRD->vbases()) {
+ if (isCycleBackToRD(VBase.getType()) ||
+ !VBase.getType().isBitwiseCloneableType(Context))
return false;
----------------
cor3ntin wrote:
You don't have a test for that.
https://github.com/llvm/llvm-project/pull/183707
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits