[arcmt] In GC, error out when there is a call that returns a pointer to
GC managed non-objc object memory.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143747 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ARCMigrate/TransGCCalls.cpp b/lib/ARCMigrate/TransGCCalls.cpp
index 8042c6c..94e965d 100644
--- a/lib/ARCMigrate/TransGCCalls.cpp
+++ b/lib/ARCMigrate/TransGCCalls.cpp
@@ -35,6 +35,13 @@
   bool VisitCallExpr(CallExpr *E) {
     TransformActions &TA = MigrateCtx.getPass().TA;
 
+    if (MigrateCtx.isGCOwnedNonObjC(E->getType())) {
+      TA.reportError("call returns pointer to GC managed memory; "
+                     "it will become unmanaged in ARC",
+                     E->getLocStart(), E->getSourceRange());
+      return true;
+    }
+
     Expr *CEE = E->getCallee()->IgnoreParenImpCasts();
     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {
       if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {