Implemented memmove_collectable API for Next runtime
when struct variables with GC'able members are copied into.
Will provide a test case later.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74984 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 290ab5d..1a8cec1 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -4238,6 +4238,8 @@
           }
         }
       }
+      if (Record && FDTTy->getDecl()->hasObjectMember())
+        Record->setHasObjectMember(true);
     } else if (FDTy->isObjCInterfaceType()) {
       /// A field cannot be an Objective-c object
       Diag(FD->getLocation(), diag::err_statically_allocated_object);
@@ -4245,6 +4247,12 @@
       EnclosingDecl->setInvalidDecl();
       continue;
     }
+    else if (getLangOptions().ObjC1 &&
+             getLangOptions().getGCMode() != LangOptions::NonGC &&
+             Record &&
+             (Context.isObjCObjectPointerType(FD->getType()) ||
+              FD->getType().isObjCGCStrong()))
+      Record->setHasObjectMember(true);
     // Keep track of the number of named members.
     if (FD->getIdentifier())
       ++NumNamedMembers;