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