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