1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li// expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li@protocol MyProtocol @end 5*67e74705SXin Li 6*67e74705SXin Li@interface NSObject @end 7*67e74705SXin Li 8*67e74705SXin Li@interface NSInterm : NSObject <MyProtocol> 9*67e74705SXin Li@end 10*67e74705SXin Li 11*67e74705SXin Li@interface NSArray : NSInterm 12*67e74705SXin Li@end 13*67e74705SXin Li 14*67e74705SXin Li@interface NSSet : NSObject <MyProtocol> 15*67e74705SXin Li@end 16*67e74705SXin Li 17*67e74705SXin Li 18*67e74705SXin Li@interface N1 : NSObject 19*67e74705SXin Li@end 20*67e74705SXin Li 21*67e74705SXin Li@interface N1() <MyProtocol> 22*67e74705SXin Li@end 23*67e74705SXin Li 24*67e74705SXin LiNSObject* test (int argc) { 25*67e74705SXin Li NSArray *array = ((void*)0); 26*67e74705SXin Li NSSet *set = ((void*)0); 27*67e74705SXin Li return (argc) ? set : array ; 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Li 31*67e74705SXin LiNSObject* test1 (int argc) { 32*67e74705SXin Li NSArray *array = ((void*)0); 33*67e74705SXin Li NSSet *set = ((void*)0); 34*67e74705SXin Li id <MyProtocol> instance = (argc) ? array : set; 35*67e74705SXin Li id <MyProtocol> instance1 = (argc) ? set : array; 36*67e74705SXin Li 37*67e74705SXin Li N1 *n1 = ((void*)0); 38*67e74705SXin Li id <MyProtocol> instance2 = (argc) ? set : n1; 39*67e74705SXin Li id <MyProtocol> instance3 = (argc) ? n1 : array; 40*67e74705SXin Li 41*67e74705SXin Li NSArray<MyProtocol> *qual_array = ((void*)0); 42*67e74705SXin Li id <MyProtocol> instance4 = (argc) ? array : qual_array; 43*67e74705SXin Li id <MyProtocol> instance5 = (argc) ? qual_array : array; 44*67e74705SXin Li NSSet<MyProtocol> *qual_set = ((void*)0); 45*67e74705SXin Li id <MyProtocol> instance6 = (argc) ? qual_set : qual_array; 46*67e74705SXin Li id <MyProtocol> instance7 = (argc) ? qual_set : array; 47*67e74705SXin Li id <MyProtocol> instance8 = (argc) ? qual_array : set; 48*67e74705SXin Li id <MyProtocol> instance9 = (argc) ? qual_array : qual_set; 49*67e74705SXin Li 50*67e74705SXin Li 51*67e74705SXin Li return (argc) ? array : set; 52*67e74705SXin Li} 53