[cfe-commits] r153793 - in /cfe/trunk: lib/ARCMigrate/TransUnusedInitDelegate.cpp test/ARCMT/init.m test/ARCMT/init.m.result

Argyrios Kyrtzidis akyrtzi at gmail.com
Fri Mar 30 18:34:06 PDT 2012


Author: akirtzidis
Date: Fri Mar 30 20:34:06 2012
New Revision: 153793

URL: http://llvm.org/viewvc/llvm-project?rev=153793&view=rev
Log:
[arcmt] When fixing the "unassigned init call" ARC error, make sure
to do a nil check for the result of the call.

rdar://10950973

Modified:
    cfe/trunk/lib/ARCMigrate/TransUnusedInitDelegate.cpp
    cfe/trunk/test/ARCMT/init.m
    cfe/trunk/test/ARCMT/init.m.result

Modified: cfe/trunk/lib/ARCMigrate/TransUnusedInitDelegate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/TransUnusedInitDelegate.cpp?rev=153793&r1=153792&r2=153793&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/TransUnusedInitDelegate.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/TransUnusedInitDelegate.cpp Fri Mar 30 20:34:06 2012
@@ -54,7 +54,11 @@
       Transaction Trans(Pass.TA);
       Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message,
                               ME->getExprLoc());
-      Pass.TA.insert(ME->getExprLoc(), "self = ");
+      SourceRange ExprRange = ME->getSourceRange();
+      Pass.TA.insert(ExprRange.getBegin(), "if (!(self = ");
+      std::string retStr = ")) return ";
+      retStr += getNilString(Pass.Ctx);
+      Pass.TA.insertAfterToken(ExprRange.getEnd(), retStr);
     }
     return true;
   }

Modified: cfe/trunk/test/ARCMT/init.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/init.m?rev=153793&r1=153792&r2=153793&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/init.m (original)
+++ cfe/trunk/test/ARCMT/init.m Fri Mar 30 20:34:06 2012
@@ -3,6 +3,8 @@
 // RUN: diff %t %s.result
 // DISABLE: mingw32
 
+#define nil (void *)0
+
 @interface NSObject
 -init;
 @end

Modified: cfe/trunk/test/ARCMT/init.m.result
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/init.m.result?rev=153793&r1=153792&r2=153793&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/init.m.result (original)
+++ cfe/trunk/test/ARCMT/init.m.result Fri Mar 30 20:34:06 2012
@@ -3,6 +3,8 @@
 // RUN: diff %t %s.result
 // DISABLE: mingw32
 
+#define nil (void *)0
+
 @interface NSObject
 -init;
 @end
@@ -16,7 +18,7 @@
 
 @implementation A
 -(id) init {
-  self = [self init];
+  if (!(self = [self init])) return nil;
   id a;
   [a init];
   a = [[A alloc] init];
@@ -25,7 +27,7 @@
 }
 
 -(id) init2 {
-  self = [super init];
+  if (!(self = [super init])) return nil;
   return self;
 }
 





More information about the cfe-commits mailing list