rdar-6600344-nil-receiver-undefined-struct-ret.m revision e1cea75e70d76f55157749a7bcad319050492945
1// RUN: clang-cc -analyze -checker-cfref -analyzer-constraints=basic -analyzer-store=basic %s -verify &&
2// RUN: clang-cc -analyze -checker-cfref -analyzer-constraints=basic -analyzer-store=basic-new-cast %s -verify
3
4typedef struct Foo { int x; } Bar;
5
6@interface MyClass {}
7- (Bar)foo;
8@end
9@implementation MyClass
10- (Bar)foo { 
11  struct Foo f = { 0 };
12  return f;
13}
14@end
15
16void createFoo() {
17  MyClass *obj = 0;  
18  Bar f = [obj foo]; // expected-warning{{The receiver in the message expression is 'nil' and results in the returned value (of type 'Bar') to be garbage or otherwise undefined.}}
19}
20
21void createFoo2() {
22  MyClass *obj = 0;  
23  [obj foo]; // no-warning
24  Bar f = [obj foo]; // expected-warning{{The receiver in the message expression is 'nil' and results in the returned value (of type 'Bar') to be garbage or otherwise undefined.}}
25}
26
27