[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / CodeGenObjC / dllstorage.m
blob64ba21f9769ae2f444f89c4de475bca25eeb2fbd
1 // RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fdeclspec -fobjc-runtime=ios -fobjc-exceptions -S -emit-llvm -o - %s | FileCheck -allow-deprecated-dag-overlap -check-prefix CHECK-IR %s
2 // RUN: %clang_cc1 -triple i686-windows-itanium -fms-extensions -fobjc-runtime=macosx -fdeclspec -fobjc-exceptions -S -emit-llvm -o - %s | FileCheck -allow-deprecated-dag-overlap -check-prefix CHECK-IR %s
3 // RUN: %clang_cc1 -triple i686-windows-itanium -fms-extensions -fobjc-runtime=objfw -fdeclspec -fobjc-exceptions -S -emit-llvm -o - %s | FileCheck -allow-deprecated-dag-overlap -check-prefix CHECK-FW %s
5 // CHECK-IR-DAG: @_objc_empty_cache = external dllimport global %struct._objc_cache
7 __declspec(dllimport)
8 @interface I
9 + (instancetype) new;
10 @end
12 // CHECK-IR-DAG: @"OBJC_METACLASS_$_I" = external dllimport global %struct._class_t
13 // CHECK-IR-DAG: @"OBJC_CLASS_$_I" = external dllimport global %struct._class_t
15 __declspec(dllexport)
16 @interface J : I
17 @end
19 // CHECK-IR-DAG: @"OBJC_METACLASS_$_J" = dso_local dllexport global %struct._class_t
20 // CHECK-IR-DAG: @"OBJC_CLASS_$_J" = dso_local dllexport global %struct._class_t
22 // CHECK-FW-DAG: @_OBJC_METACLASS_J = dso_local dllexport global
23 // CHECK-FW-DAG: @_OBJC_CLASS_J = dso_local dllexport global
25 @implementation J {
26   id _ivar;
28 @end
30 // CHECK-IR-DAG: @"OBJC_IVAR_$_J._ivar" = global i32
32 @interface K : J
33 @end
35 // CHECK-IR-DAG: @"OBJC_METACLASS_$_K" = dso_local global %struct._class_t
36 // CHECK-IR-DAG: @"OBJC_CLASS_$_K" = dso_local global %struct._class_t
38 // CHECK-FW-DAG: @_OBJC_METACLASS_K = dso_local global
39 // CHECK-FW-DAG: @_OBJC_CLASS_K = dso_local global
41 @implementation K {
42   id _ivar;
44 @end
46 // CHECK-IR-DAG: @"OBJC_IVAR_$_K._ivar" = global i32
48 __declspec(dllexport)
49 @interface L : K
50 @end
52 // CHECK-IR-DAG: @"OBJC_METACLASS_$_L" = dso_local dllexport global %struct._class_t
53 // CHECK-IR-DAG: @"OBJC_CLASS_$_L" = dso_local dllexport global %struct._class_t
55 // CHECK-FW-DAG: @_OBJC_METACLASS_L = dso_local dllexport global
56 // CHECK-FW-DAG: @_OBJC_CLASS_L = dso_local dllexport global
58 @implementation L {
59   id _none;
61   @public
62   id _public;
64   @protected
65   id _protected;
67   @package
68   id _package;
70   @private
71   id _private;
73 @end
75 // CHECK-IR-DAG: @"OBJC_IVAR_$_L._none" = global i32
76 // CHECK-IR-DAG: @"OBJC_IVAR_$_L._public" = dllexport global i32
77 // CHECK-IR-DAG: @"OBJC_IVAR_$_L._protected" = dllexport global i32
78 // CHECK-IR-DAG: @"OBJC_IVAR_$_L._package" = global i32
79 // CHECK-IR-DAG: @"OBJC_IVAR_$_L._private" = global i32
81 __declspec(dllimport)
82 @interface M : I {
83   @public
84   id _ivar;
86 @end
88 // CHECK-FW-DAG: @_OBJC_CLASS_M = external dllimport global i32
90 // CHECK-IR-DAG: @"OBJC_IVAR_$_M._ivar" = external dllimport global i32
92 __declspec(dllexport)
93 __attribute__((__objc_exception__))
94 @interface N : I
95 @end
97 // CHECK-FW-DAG: @_OBJC_METACLASS_N = dso_local dllexport global
98 // CHECK-FW-DAG: @_OBJC_CLASS_N = dso_local dllexport global
100 @implementation N : I
101 @end
103 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_N" = dso_local dllexport global %struct._objc_typeinfo
105 __declspec(dllimport)
106 __attribute__((__objc_exception__))
107 @interface O : I
108 @end
110 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_O" = external dllimport global %struct._objc_typeinfo
112 __attribute__((__objc_exception__))
113 @interface P : I
114 @end
116 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_P" = external dso_local global %struct._objc_typeinfo
118 @interface Q : M
119 @end
121 id f(Q *q) {
122   return q->_ivar;
125 // CHECK-IR-DAG: @"OBJC_IVAR_$_M._ivar" = external dllimport global i32
127 int g(void) {
128   @autoreleasepool {
129     M *mi = [M new];
130     @try {
131       mi->_ivar = (void *)0;
132       @throw(@"CFConstantString");
133     } @catch (id) {
134       return 1;
135     } @catch (I *) {
136       return 2;
137     } @catch (J *) {
138       return 3;
139     } @catch (K *) {
140       return 4;
141     } @catch (L *) {
142       return 5;
143     } @catch (M *) {
144       return 6;
145     } @catch (N *) {
146       return 7;
147     } @catch (O *) {
148       return 8;
149     } @catch (P *) {
150       return 9;
151     }
152   }
153   return 0;
156 // CHECK-IR-DAG: @OBJC_EHTYPE_id = external dllimport global %struct._objc_typeinfo
157 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_I" = weak global %struct._objc_typeinfo
158 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_K" = weak global %struct._objc_typeinfo
159 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_L" = weak global %struct._objc_typeinfo
160 // CHECK-IR-DAG: @"OBJC_EHTYPE_$_M" = weak global %struct._objc_typeinfo