to do a nil check for the result of the call.
rdar://
10950973
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153793
91177308-0d34-0410-b5e6-
96231b3b80d8
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;
}
// RUN: diff %t %s.result
// DISABLE: mingw32
+#define nil (void *)0
+
@interface NSObject
-init;
@end
// RUN: diff %t %s.result
// DISABLE: mingw32
+#define nil (void *)0
+
@interface NSObject
-init;
@end
@implementation A
-(id) init {
- self = [self init];
+ if (!(self = [self init])) return nil;
id a;
[a init];
a = [[A alloc] init];
}
-(id) init2 {
- self = [super init];
+ if (!(self = [super init])) return nil;
return self;
}