1*67e74705SXin Li// RUN: %clang_cc1 -triple i386-apple-darwin8 -analyze -analyzer-checker=core,alpha.core -analyzer-constraints=range -analyzer-store=region -verify -Wno-objc-root-class %s
2*67e74705SXin Li
3*67e74705SXin Li// <rdar://problem/6888289> - This test case shows that a nil instance
4*67e74705SXin Li// variable can possibly be initialized by a method.
5*67e74705SXin Li@interface RDar6888289
6*67e74705SXin Li{
7*67e74705SXin Li  id *x;
8*67e74705SXin Li}
9*67e74705SXin Li- (void) test:(id) y;
10*67e74705SXin Li- (void) test2:(id) y;
11*67e74705SXin Li- (void) invalidate;
12*67e74705SXin Li@end
13*67e74705SXin Li
14*67e74705SXin Liid *getVal(void);
15*67e74705SXin Li
16*67e74705SXin Li@implementation RDar6888289
17*67e74705SXin Li- (void) test:(id)y {
18*67e74705SXin Li  if (!x)
19*67e74705SXin Li    [self invalidate];
20*67e74705SXin Li  *x = y;
21*67e74705SXin Li}
22*67e74705SXin Li- (void) test2:(id)y {
23*67e74705SXin Li  if (!x) {}
24*67e74705SXin Li  *x = y; // expected-warning {{null}}
25*67e74705SXin Li}
26*67e74705SXin Li
27*67e74705SXin Li- (void) invalidate {
28*67e74705SXin Li  x = getVal();
29*67e74705SXin Li}
30*67e74705SXin Li
31*67e74705SXin Li@end
32*67e74705SXin Li
33