rdar-6600344-nil-receiver-undefined-struct-ret.m revision d84f422ebfde2145bce79a8fa823e3393b392994
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,core.experimental -analyzer-check-objc-mem -analyzer-constraints=basic -analyzer-store=basic %s -verify
2// RUN: %clang_cc1 -analyze -analyzer-checker=core,core.experimental -analyzer-check-objc-mem -analyzer-constraints=basic -analyzer-store=region %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 of message 'foo' is nil and returns a value of type 'Bar' that will be garbage}}
19}
20
21void createFoo2() {
22  MyClass *obj = 0;  
23  [obj foo]; // no-warning
24  Bar f = [obj foo]; // expected-warning{{The receiver of message 'foo' is nil and returns a value of type 'Bar' that will be garbage}}
25}
26
27