================
@@ -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

Reply via email to