llvm-project/clang/test/Analysis/nil-receiver-undefined-larg...

39 lines
936 B
Objective-C

// RUN: %clang_cc1 -triple i386-apple-darwin8 -analyze -analyzer-checker=core,core.experimental -analyzer-constraints=range -analyzer-store=region -verify %s
// <rdar://problem/6888289> - This test case shows that a nil instance
// variable can possibly be initialized by a method.
typedef struct RDar6888289_data {
long data[100];
} RDar6888289_data;
@interface RDar6888289
{
RDar6888289 *x;
}
- (RDar6888289_data) test;
- (RDar6888289_data) test2;
- (void) invalidate;
- (RDar6888289_data) getData;
@end
@implementation RDar6888289
- (RDar6888289_data) test {
if (!x)
[self invalidate];
return [x getData];
}
- (RDar6888289_data) test2 {
if (!x) {}
return [x getData]; // expected-warning{{The receiver of message 'getData' is nil and returns a value of type 'RDar6888289_data' that will be garbage}}
}
- (void) invalidate {
x = self;
}
- (RDar6888289_data) getData {
return (RDar6888289_data) { 0 };
}
@end