1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li// expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li@interface Test {} 5*67e74705SXin Li+ (Test*)one; 6*67e74705SXin Li- (int)two; 7*67e74705SXin Li@end 8*67e74705SXin Li 9*67e74705SXin Liint main () 10*67e74705SXin Li{ 11*67e74705SXin Li return Test.one.two; 12*67e74705SXin Li} 13*67e74705SXin Li 14*67e74705SXin Li// rdar://16650575 15*67e74705SXin Li__attribute__((objc_root_class)) 16*67e74705SXin Li@interface RootClass { 17*67e74705SXin Li Class isa; 18*67e74705SXin Li} 19*67e74705SXin Li 20*67e74705SXin Li@property int property; 21*67e74705SXin Li-(int)method; 22*67e74705SXin Li- (void) setMethod : (int)arg; 23*67e74705SXin Li+(int)classMethod; 24*67e74705SXin Li@end 25*67e74705SXin Li 26*67e74705SXin Li@interface Subclass : RootClass @end 27*67e74705SXin Livoid Test1() { 28*67e74705SXin Li // now okay 29*67e74705SXin Li (void)RootClass.property; 30*67e74705SXin Li (void)Subclass.property; 31*67e74705SXin Li (void)RootClass.method; 32*67e74705SXin Li (void)Subclass.method; 33*67e74705SXin Li 34*67e74705SXin Li RootClass.property = 1; 35*67e74705SXin Li Subclass.property = 2; 36*67e74705SXin Li RootClass.method = 3; 37*67e74705SXin Li Subclass.method = 4; 38*67e74705SXin Li 39*67e74705SXin Li // okay 40*67e74705SXin Li (void)RootClass.classMethod; 41*67e74705SXin Li (void)Subclass.classMethod; 42*67e74705SXin Li 43*67e74705SXin Li // also okay 44*67e74705SXin Li (void)[RootClass property]; 45*67e74705SXin Li (void)[Subclass property]; 46*67e74705SXin Li [RootClass method]; 47*67e74705SXin Li [Subclass method]; 48*67e74705SXin Li [RootClass classMethod]; 49*67e74705SXin Li [Subclass classMethod]; 50*67e74705SXin Li 51*67e74705SXin Li // also okay 52*67e74705SXin Li [RootClass setProperty : 1]; 53*67e74705SXin Li [Subclass setProperty : 2]; 54*67e74705SXin Li [RootClass setMethod : 3]; 55*67e74705SXin Li [Subclass setMethod : 4]; 56*67e74705SXin Li} 57