2014-07-17 00:16:04 +08:00
|
|
|
// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin %s -o - | FileCheck %s
|
|
|
|
// rdar://16462586
|
|
|
|
|
|
|
|
__attribute__((objc_runtime_name("MySecretNamespace.Protocol")))
|
|
|
|
@protocol Protocol
|
|
|
|
- (void) MethodP;
|
|
|
|
+ (void) ClsMethodP;
|
|
|
|
@end
|
|
|
|
|
|
|
|
__attribute__((objc_runtime_name("MySecretNamespace.Protocol2")))
|
|
|
|
@protocol Protocol2
|
|
|
|
- (void) MethodP2;
|
|
|
|
+ (void) ClsMethodP2;
|
|
|
|
@end
|
|
|
|
|
2015-06-17 05:04:55 +08:00
|
|
|
__attribute__((objc_runtime_name("MySecretNamespace.Protocol3")))
|
|
|
|
@protocol Protocol3
|
|
|
|
@end
|
|
|
|
|
2014-07-17 00:16:04 +08:00
|
|
|
__attribute__((objc_runtime_name("MySecretNamespace.Message")))
|
|
|
|
@interface Message <Protocol, Protocol2> {
|
|
|
|
id MyIVAR;
|
|
|
|
}
|
2015-06-17 05:04:55 +08:00
|
|
|
|
|
|
|
@property(retain) Message *msgProp;
|
|
|
|
@property(retain) Message<Protocol3> *msgProtoProp;
|
|
|
|
@property(retain) id<Protocol3> idProtoProp;
|
|
|
|
|
2014-07-17 00:16:04 +08:00
|
|
|
@end
|
|
|
|
|
|
|
|
@implementation Message
|
|
|
|
- (id) MyMethod {
|
|
|
|
return MyIVAR;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ (id) MyClsMethod {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) MethodP{}
|
|
|
|
- (void) MethodP2{}
|
|
|
|
|
|
|
|
+ (void) ClsMethodP {}
|
|
|
|
+ (void) ClsMethodP2 {}
|
|
|
|
@end
|
|
|
|
|
|
|
|
// rdar://16877359
|
|
|
|
__attribute__((objc_runtime_name("foo")))
|
|
|
|
@interface SLREarth
|
|
|
|
- (instancetype)init;
|
|
|
|
+ (instancetype)alloc;
|
|
|
|
@end
|
|
|
|
|
|
|
|
id Test16877359() {
|
|
|
|
return [SLREarth alloc];
|
|
|
|
}
|
|
|
|
|
2015-06-17 05:04:55 +08:00
|
|
|
// CHECK: @"OBJC_IVAR_$_MySecretNamespace.Message.MyIVAR" = global i64 0
|
2014-07-17 00:16:04 +08:00
|
|
|
// CHECK: @"OBJC_CLASS_$_MySecretNamespace.Message" = global %struct._class_t
|
|
|
|
// CHECK: @"OBJC_METACLASS_$_MySecretNamespace.Message" = global %struct._class_t
|
2015-06-17 05:04:55 +08:00
|
|
|
|
2016-09-19 00:12:14 +08:00
|
|
|
// CHECK: private unnamed_addr constant [42 x i8] c"T@\22MySecretNamespace.Message\22,&,V_msgProp\00"
|
|
|
|
// CHECK: private unnamed_addr constant [76 x i8] c"T@\22MySecretNamespace.Message<MySecretNamespace.Protocol3>\22,&,V_msgProtoProp\00"
|
|
|
|
// CHECK: private unnamed_addr constant [50 x i8] c"T@\22<MySecretNamespace.Protocol3>\22,&,V_idProtoProp\00"
|
2015-06-17 05:04:55 +08:00
|
|
|
|
2014-07-17 00:16:04 +08:00
|
|
|
// CHECK: @"OBJC_CLASS_$_foo" = external global %struct._class_t
|
|
|
|
// CHECK: define internal i8* @"\01-[Message MyMethod]"
|
2015-02-28 05:19:58 +08:00
|
|
|
// CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_MySecretNamespace.Message.MyIVAR"
|