xref: /aosp_15_r20/external/clang/test/CodeGenObjC/objc-asm-attribute-test.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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