1*67e74705SXin Li// RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s 2*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s 3*67e74705SXin Li// expected-no-diagnostics 4*67e74705SXin Li 5*67e74705SXin Li//===------------------------------------------------------------------------------------------===// 6*67e74705SXin Li// This files tests our path-sensitive handling of Objective-c++ files. 7*67e74705SXin Li//===------------------------------------------------------------------------------------------===// 8*67e74705SXin Li 9*67e74705SXin Li// Test basic handling of references. 10*67e74705SXin Lichar &test1_aux(); 11*67e74705SXin Lichar *test1() { 12*67e74705SXin Li return &test1_aux(); 13*67e74705SXin Li} 14*67e74705SXin Li 15*67e74705SXin Li// Test test1_aux() evaluates to char &. 16*67e74705SXin Lichar test1_as_rvalue() { 17*67e74705SXin Li return test1_aux(); 18*67e74705SXin Li} 19*67e74705SXin Li 20*67e74705SXin Li// Test basic handling of references with Objective-C classes. 21*67e74705SXin Li@interface Test1 22*67e74705SXin Li- (char&) foo; 23*67e74705SXin Li@end 24*67e74705SXin Li 25*67e74705SXin Lichar* Test1_harness(Test1 *p) { 26*67e74705SXin Li return &[p foo]; 27*67e74705SXin Li} 28*67e74705SXin Li 29*67e74705SXin Lichar Test1_harness_b(Test1 *p) { 30*67e74705SXin Li return [p foo]; 31*67e74705SXin Li} 32*67e74705SXin Li 33*67e74705SXin Li// Basic test of C++ references with Objective-C pointers. 34*67e74705SXin Li@interface RDar10569024 35*67e74705SXin Li@property(readonly) int x; 36*67e74705SXin Li@end 37*67e74705SXin Li 38*67e74705SXin Litypedef RDar10569024* RDar10569024Ref; 39*67e74705SXin Li 40*67e74705SXin Livoid rdar10569024_aux(RDar10569024Ref o); 41*67e74705SXin Li 42*67e74705SXin Liint rdar10569024(id p, id collection) { 43*67e74705SXin Li for (id elem in collection) { 44*67e74705SXin Li const RDar10569024Ref &o = (RDar10569024Ref) elem; 45*67e74705SXin Li rdar10569024_aux(o); // no-warning 46*67e74705SXin Li return o.x; // no-warning 47*67e74705SXin Li } 48*67e74705SXin Li return 0; 49*67e74705SXin Li} 50