diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp | 6 | ||||
-rw-r--r-- | clang/test/ARCMT/init.m | 2 | ||||
-rw-r--r-- | clang/test/ARCMT/init.m.result | 6 |
3 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp b/clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp index e2aa6ff93cf..60ed32aef4c 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 36e5148476e..9dbb1f82b82 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 9f568d83ed3..d7f730083aa 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; } |