r191332 - ObjectiveC migrator: iDOn't mangle names when

Fariborz Jahanian fjahanian at apple.com
Tue Sep 24 13:20:52 PDT 2013


Author: fjahanian
Date: Tue Sep 24 15:20:52 2013
New Revision: 191332

URL: http://llvm.org/viewvc/llvm-project?rev=191332&view=rev
Log:
ObjectiveC migrator: iDOn't mangle names when 
NS_RETURNS_INNER_POINTER annotation is suggested on
a property. // rdar://15044991

Modified:
    cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
    cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m
    cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result

Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=191332&r1=191331&r2=191332&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Tue Sep 24 15:20:52 2013
@@ -53,6 +53,7 @@ class ObjCMigrateASTConsumer : public AS
                                  ObjCMethodDecl *OM);
   bool migrateProperty(ASTContext &Ctx, ObjCContainerDecl *D, ObjCMethodDecl *OM);
   void migrateNsReturnsInnerPointer(ASTContext &Ctx, ObjCMethodDecl *OM);
+  void migratePropertyNsReturnsInnerPointer(ASTContext &Ctx, ObjCPropertyDecl *P);
   void migrateFactoryMethod(ASTContext &Ctx, ObjCContainerDecl *CDecl,
                             ObjCMethodDecl *OM,
                             ObjCInstanceTypeFamily OIT_Family = OIT_None);
@@ -350,8 +351,14 @@ void ObjCMigrateASTConsumer::migrateObjC
     ObjCMethodDecl *Method = (*M);
     if (Method->isDeprecated())
       continue;
-    if (!migrateProperty(Ctx, D, Method))
-      migrateNsReturnsInnerPointer(Ctx, Method);
+    migrateProperty(Ctx, D, Method);
+    migrateNsReturnsInnerPointer(Ctx, Method);
+  }
+  for (ObjCContainerDecl::prop_iterator P = D->prop_begin(),
+       E = D->prop_end(); P != E; ++P) {
+    ObjCPropertyDecl *Prop = *P;
+    if (!P->isDeprecated())
+      migratePropertyNsReturnsInnerPointer(Ctx, Prop);
   }
 }
 
@@ -831,7 +838,8 @@ bool ObjCMigrateASTConsumer::migrateProp
 
 void ObjCMigrateASTConsumer::migrateNsReturnsInnerPointer(ASTContext &Ctx,
                                                           ObjCMethodDecl *OM) {
-  if (OM->hasAttr<ObjCReturnsInnerPointerAttr>())
+  if (OM->isImplicit() ||
+      OM->hasAttr<ObjCReturnsInnerPointerAttr>())
     return;
   
   QualType RT = OM->getResultType();
@@ -844,6 +852,18 @@ void ObjCMigrateASTConsumer::migrateNsRe
   Editor->commit(commit);
 }
 
+void ObjCMigrateASTConsumer::migratePropertyNsReturnsInnerPointer(ASTContext &Ctx,
+                                                                  ObjCPropertyDecl *P) {
+  QualType T = P->getType();
+  
+  if (!TypeIsInnerPointer(T) ||
+      !Ctx.Idents.get("NS_RETURNS_INNER_POINTER").hasMacroDefinition())
+    return;
+  edit::Commit commit(*Editor);
+  commit.insertBefore(P->getLocEnd(), " NS_RETURNS_INNER_POINTER ");
+  Editor->commit(commit);
+}
+
 void ObjCMigrateASTConsumer::migrateMethods(ASTContext &Ctx,
                                                  ObjCContainerDecl *CDecl) {
   if (CDecl->isDeprecated())

Modified: cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m?rev=191332&r1=191331&r2=191332&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m Tue Sep 24 15:20:52 2013
@@ -36,6 +36,8 @@
 #define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased))
 #endif
 
+#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
+
 CF_IMPLICIT_BRIDGING_ENABLED
 
 typedef unsigned long CFTypeID;
@@ -104,3 +106,19 @@ CF_IMPLICIT_BRIDGING_DISABLED
 - (TTJSObjectRef)JSObject1;
 - (JSObjectRef*)JSObject2;
 @end
+
+// rdar://15044991
+typedef void *SecTrustRef;
+
+ at interface NSURLProtectionSpace
+ at property (readonly) SecTrustRef serverTrust NS_AVAILABLE;
+- (void *) FOO NS_AVAILABLE;
+ at property (readonly) void * mitTrust NS_AVAILABLE;
+
+ at property (readonly) void * mittiTrust;
+
+ at property (readonly) SecTrustRef XserverTrust;
+
+- (SecTrustRef) FOO1 NS_AVAILABLE;
+
+ at end

Modified: cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result?rev=191332&r1=191331&r2=191332&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result (original)
+++ cfe/trunk/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result Tue Sep 24 15:20:52 2013
@@ -36,6 +36,8 @@
 #define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased))
 #endif
 
+#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
+
 CF_IMPLICIT_BRIDGING_ENABLED
 
 typedef unsigned long CFTypeID;
@@ -104,3 +106,19 @@ CF_IMPLICIT_BRIDGING_DISABLED
 - (TTJSObjectRef)JSObject1;
 - (JSObjectRef*)JSObject2 NS_RETURNS_INNER_POINTER;
 @end
+
+// rdar://15044991
+typedef void *SecTrustRef;
+
+ at interface NSURLProtectionSpace
+ at property (readonly) SecTrustRef  NS_RETURNS_INNER_POINTER serverTrust NS_AVAILABLE;
+- (void *) FOO NS_AVAILABLE NS_RETURNS_INNER_POINTER;
+ at property (readonly) void *  NS_RETURNS_INNER_POINTER mitTrust NS_AVAILABLE;
+
+ at property (readonly) void *  NS_RETURNS_INNER_POINTER mittiTrust;
+
+ at property (readonly) SecTrustRef  NS_RETURNS_INNER_POINTER XserverTrust;
+
+- (SecTrustRef) FOO1 NS_AVAILABLE NS_RETURNS_INNER_POINTER;
+
+ at end





More information about the cfe-commits mailing list