[cfe-commits] r143886 - in /cfe/trunk: lib/ARCMigrate/TransGCAttrs.cpp lib/ARCMigrate/Transforms.h test/ARCMT/GC.h test/ARCMT/GC.m test/ARCMT/GC.m.result

Argyrios Kyrtzidis akyrtzi at gmail.com
Sun Nov 6 10:58:18 PST 2011


Author: akirtzidis
Date: Sun Nov  6 12:58:17 2011
New Revision: 143886

URL: http://llvm.org/viewvc/llvm-project?rev=143886&view=rev
Log:
[arcmt] In GC, clear redundant __strong's.

Added:
    cfe/trunk/test/ARCMT/GC.h
Modified:
    cfe/trunk/lib/ARCMigrate/TransGCAttrs.cpp
    cfe/trunk/lib/ARCMigrate/Transforms.h
    cfe/trunk/test/ARCMT/GC.m
    cfe/trunk/test/ARCMT/GC.m.result

Modified: cfe/trunk/lib/ARCMigrate/TransGCAttrs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/TransGCAttrs.cpp?rev=143886&r1=143885&r2=143886&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/TransGCAttrs.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/TransGCAttrs.cpp Sun Nov  6 12:58:17 2011
@@ -101,7 +101,7 @@
     MigrationContext::GCAttrOccurrence &Attr = MigrateCtx.GCAttrs.back();
 
     Attr.Kind = Kind;
-    Attr.Loc = Loc;
+    Attr.Loc = SM.getImmediateExpansionRange(Loc).first;
     Attr.ModifiedType = TL.getModifiedLoc().getType();
     Attr.Dcl = D;
     Attr.FullyMigratable = FullyMigratable;
@@ -163,18 +163,43 @@
 
 } // anonymous namespace
 
+static void clearRedundantStrongs(MigrationContext &MigrateCtx) {
+  TransformActions &TA = MigrateCtx.Pass.TA;
+
+  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {
+    MigrationContext::GCAttrOccurrence &Attr = MigrateCtx.GCAttrs[i];
+    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Strong &&
+        Attr.FullyMigratable && Attr.Dcl) {
+      TypeSourceInfo *TInfo = 0;
+      if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(Attr.Dcl))
+        TInfo = DD->getTypeSourceInfo();
+      else if (ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(Attr.Dcl))
+        TInfo = PD->getTypeSourceInfo();
+      if (!TInfo)
+        continue;
+
+      if (TInfo->getType().getObjCLifetime() == Qualifiers::OCL_Strong) {
+        Transaction Trans(TA);
+        TA.remove(Attr.Loc);
+      }
+    }
+  }
+}
+
 void GCAttrsTraverser::traverseTU(MigrationContext &MigrateCtx) {
   GCAttrsCollector(MigrateCtx).TraverseDecl(
                                   MigrateCtx.Pass.Ctx.getTranslationUnitDecl());
-#if 0
+  clearRedundantStrongs(MigrateCtx);
+}
+
+void MigrationContext::dumpGCAttrs() {
   llvm::errs() << "\n################\n";
-  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {
-    MigrationContext::GCAttrOccurrence &Attr = MigrateCtx.GCAttrs[i];
+  for (unsigned i = 0, e = GCAttrs.size(); i != e; ++i) {
+    GCAttrOccurrence &Attr = GCAttrs[i];
     llvm::errs() << "KIND: "
-        << (Attr.Kind == MigrationContext::GCAttrOccurrence::Strong ? "strong"
-                                                                    : "weak");
+        << (Attr.Kind == GCAttrOccurrence::Strong ? "strong" : "weak");
     llvm::errs() << "\nLOC: ";
-    Attr.Loc.dump(MigrateCtx.Pass.Ctx.getSourceManager());
+    Attr.Loc.dump(Pass.Ctx.getSourceManager());
     llvm::errs() << "\nTYPE: ";
     Attr.ModifiedType.dump();
     if (Attr.Dcl) {
@@ -187,5 +212,4 @@
     llvm::errs() << "\n----------------\n";
   }
   llvm::errs() << "\n################\n";
-#endif
 }

Modified: cfe/trunk/lib/ARCMigrate/Transforms.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/Transforms.h?rev=143886&r1=143885&r2=143886&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/Transforms.h (original)
+++ cfe/trunk/lib/ARCMigrate/Transforms.h Sun Nov  6 12:58:17 2011
@@ -111,6 +111,8 @@
   bool isGCOwnedNonObjC(QualType T);
 
   void traverse(TranslationUnitDecl *TU);
+
+  void dumpGCAttrs();
 };
 
 class PropertyRewriteTraverser : public ASTTraverser {

Added: cfe/trunk/test/ARCMT/GC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/GC.h?rev=143886&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/GC.h (added)
+++ cfe/trunk/test/ARCMT/GC.h Sun Nov  6 12:58:17 2011
@@ -0,0 +1,5 @@
+
+ at interface ExtInterface {
+  __strong ExtInterface *myivar;
+}
+ at end

Modified: cfe/trunk/test/ARCMT/GC.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/GC.m?rev=143886&r1=143885&r2=143886&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/GC.m (original)
+++ cfe/trunk/test/ARCMT/GC.m Sun Nov  6 12:58:17 2011
@@ -5,12 +5,15 @@
 // RUN: diff %t %s.result
 
 #include "Common.h"
+#include "GC.h"
 
 void test1(CFTypeRef *cft) {
   id x = NSMakeCollectable(cft);
 }
 
- at interface I1
+ at interface I1 {
+  __strong I1 *myivar;
+}
 @end
 
 @implementation I1

Modified: cfe/trunk/test/ARCMT/GC.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/GC.m.result?rev=143886&r1=143885&r2=143886&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/GC.m.result (original)
+++ cfe/trunk/test/ARCMT/GC.m.result Sun Nov  6 12:58:17 2011
@@ -5,12 +5,15 @@
 // RUN: diff %t %s.result
 
 #include "Common.h"
+#include "GC.h"
 
 void test1(CFTypeRef *cft) {
   id x = CFBridgingRelease(cft);
 }
 
- at interface I1
+ at interface I1 {
+   I1 *myivar;
+}
 @end
 
 @implementation I1





More information about the cfe-commits mailing list