1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin %s -o - | FileCheck %s 2*67e74705SXin Li// rdar://16462586 3*67e74705SXin Li 4*67e74705SXin Li__attribute__((objc_runtime_name("MySecretNamespace.Protocol"))) 5*67e74705SXin Li@protocol Protocol 6*67e74705SXin Li- (void) MethodP; 7*67e74705SXin Li+ (void) ClsMethodP; 8*67e74705SXin Li@end 9*67e74705SXin Li 10*67e74705SXin Li__attribute__((objc_runtime_name("MySecretNamespace.Protocol2"))) 11*67e74705SXin Li@protocol Protocol2 12*67e74705SXin Li- (void) MethodP2; 13*67e74705SXin Li+ (void) ClsMethodP2; 14*67e74705SXin Li@end 15*67e74705SXin Li 16*67e74705SXin Li__attribute__((objc_runtime_name("MySecretNamespace.Protocol3"))) 17*67e74705SXin Li@protocol Protocol3 18*67e74705SXin Li@end 19*67e74705SXin Li 20*67e74705SXin Li__attribute__((objc_runtime_name("MySecretNamespace.Message"))) 21*67e74705SXin Li@interface Message <Protocol, Protocol2> { 22*67e74705SXin Li id MyIVAR; 23*67e74705SXin Li} 24*67e74705SXin Li 25*67e74705SXin Li@property(retain) Message *msgProp; 26*67e74705SXin Li@property(retain) Message<Protocol3> *msgProtoProp; 27*67e74705SXin Li@property(retain) id<Protocol3> idProtoProp; 28*67e74705SXin Li 29*67e74705SXin Li@end 30*67e74705SXin Li 31*67e74705SXin Li@implementation Message 32*67e74705SXin Li- (id) MyMethod { 33*67e74705SXin Li return MyIVAR; 34*67e74705SXin Li} 35*67e74705SXin Li 36*67e74705SXin Li+ (id) MyClsMethod { 37*67e74705SXin Li return 0; 38*67e74705SXin Li} 39*67e74705SXin Li 40*67e74705SXin Li- (void) MethodP{} 41*67e74705SXin Li- (void) MethodP2{} 42*67e74705SXin Li 43*67e74705SXin Li+ (void) ClsMethodP {} 44*67e74705SXin Li+ (void) ClsMethodP2 {} 45*67e74705SXin Li@end 46*67e74705SXin Li 47*67e74705SXin Li// rdar://16877359 48*67e74705SXin Li__attribute__((objc_runtime_name("foo"))) 49*67e74705SXin Li@interface SLREarth 50*67e74705SXin Li- (instancetype)init; 51*67e74705SXin Li+ (instancetype)alloc; 52*67e74705SXin Li@end 53*67e74705SXin Li 54*67e74705SXin Liid Test16877359() { 55*67e74705SXin Li return [SLREarth alloc]; 56*67e74705SXin Li} 57*67e74705SXin Li 58*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_MySecretNamespace.Message.MyIVAR" = global i64 0 59*67e74705SXin Li// CHECK: @"OBJC_CLASS_$_MySecretNamespace.Message" = global %struct._class_t 60*67e74705SXin Li// CHECK: @"OBJC_METACLASS_$_MySecretNamespace.Message" = global %struct._class_t 61*67e74705SXin Li 62*67e74705SXin Li// CHECK: private global [42 x i8] c"T@\22MySecretNamespace.Message\22,&,V_msgProp\00" 63*67e74705SXin Li// CHECK: private global [76 x i8] c"T@\22MySecretNamespace.Message<MySecretNamespace.Protocol3>\22,&,V_msgProtoProp\00" 64*67e74705SXin Li// CHECK: private global [50 x i8] c"T@\22<MySecretNamespace.Protocol3>\22,&,V_idProtoProp\00" 65*67e74705SXin Li 66*67e74705SXin Li// CHECK: @"OBJC_CLASS_$_foo" = external global %struct._class_t 67*67e74705SXin Li// CHECK: define internal i8* @"\01-[Message MyMethod]" 68*67e74705SXin Li// CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_MySecretNamespace.Message.MyIVAR" 69