aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp6
-rw-r--r--clang/test/ARCMT/init.m2
-rw-r--r--clang/test/ARCMT/init.m.result6
3 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp b/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp
index e2aa6ff..60ed32a 100644
--- a/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp
+++ b/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp
@@ -54,7 +54,11 @@ public:
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;
}
diff --git a/clang/test/ARCMT/init.m b/clang/test/ARCMT/init.m
index 36e5148..9dbb1f8 100644
--- a/clang/test/ARCMT/init.m
+++ b/clang/test/ARCMT/init.m
@@ -3,6 +3,8 @@
// RUN: diff %t %s.result
// DISABLE: mingw32
+#define nil (void *)0
+
@interface NSObject
-init;
@end
diff --git a/clang/test/ARCMT/init.m.result b/clang/test/ARCMT/init.m.result
index 9f568d8..d7f7300 100644
--- a/clang/test/ARCMT/init.m.result
+++ b/clang/test/ARCMT/init.m.result
@@ -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;
}