Skip to content

Commit 08be7a4

Browse files
committed
[Clang] Convert some tests to opaque pointers (NFC)
1 parent 1898fc1 commit 08be7a4

23 files changed

+529
-592
lines changed

clang/test/CodeGenObjCXX/arc-attrs.mm

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc -o - %s | FileCheck %s
22

33
id makeObject1() __attribute__((ns_returns_retained));
44
id makeObject2() __attribute__((ns_returns_retained));
55
void releaseObject(__attribute__((ns_consumed)) id);
66

77
// CHECK-LABEL: define{{.*}} void @_Z20basicCorrectnessTestv
88
void basicCorrectnessTest() {
9-
// CHECK: [[X:%.*]] = alloca i8*, align 8
10-
// CHECK-NEXT: [[OBJ1:%.*]] = call noundef i8* @_Z11makeObject1v()
11-
// CHECK-NEXT: store i8* [[OBJ1]], i8** [[X]], align 8
9+
// CHECK: [[X:%.*]] = alloca ptr, align 8
10+
// CHECK-NEXT: [[OBJ1:%.*]] = call noundef ptr @_Z11makeObject1v()
11+
// CHECK-NEXT: store ptr [[OBJ1]], ptr [[X]], align 8
1212
id x = makeObject1();
1313

14-
// CHECK-NEXT: [[OBJ2:%.*]] = call noundef i8* @_Z11makeObject2v()
15-
// CHECK-NEXT: call void @_Z13releaseObjectP11objc_object(i8* noundef [[OBJ2]])
14+
// CHECK-NEXT: [[OBJ2:%.*]] = call noundef ptr @_Z11makeObject2v()
15+
// CHECK-NEXT: call void @_Z13releaseObjectP11objc_object(ptr noundef [[OBJ2]])
1616
releaseObject(makeObject2());
1717

18-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[X]], i8* null)
18+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[X]], ptr null)
1919
// CHECK-NEXT: ret void
2020
}
2121

@@ -30,20 +30,20 @@ void basicCorrectnessTest() {
3030

3131
// CHECK-LABEL: define{{.*}} void @_Z12templateTestv
3232
void templateTest() {
33-
// CHECK: [[X:%.*]] = alloca i8*, align 8
34-
// CHECK-NEXT: [[OBJ1:%.*]] = call noundef i8* @_Z12makeObjectT1IU8__strongP11objc_objectET_v()
35-
// CHECK-NEXT: store i8* [[OBJ1]], i8** [[X]], align 8
33+
// CHECK: [[X:%.*]] = alloca ptr, align 8
34+
// CHECK-NEXT: [[OBJ1:%.*]] = call noundef ptr @_Z12makeObjectT1IU8__strongP11objc_objectET_v()
35+
// CHECK-NEXT: store ptr [[OBJ1]], ptr [[X]], align 8
3636
id x = makeObjectT1<id>();
3737

38-
// CHECK-NEXT: [[OBJ2:%.*]] = call noundef i8* @_Z12makeObjectT2IU8__strongP11objc_objectET_v()
39-
// CHECK-NEXT: call void @_Z13releaseObjectP11objc_object(i8* noundef [[OBJ2]])
38+
// CHECK-NEXT: [[OBJ2:%.*]] = call noundef ptr @_Z12makeObjectT2IU8__strongP11objc_objectET_v()
39+
// CHECK-NEXT: call void @_Z13releaseObjectP11objc_object(ptr noundef [[OBJ2]])
4040
releaseObject(makeObjectT2<id>());
4141

42-
// CHECK-NEXT: [[OBJ3:%.*]] = call noundef i8* @_Z11makeObject1v()
43-
// CHECK-NEXT: call void @_Z14releaseObjectTIU8__strongP11objc_objectEvT_(i8* noundef [[OBJ3]])
42+
// CHECK-NEXT: [[OBJ3:%.*]] = call noundef ptr @_Z11makeObject1v()
43+
// CHECK-NEXT: call void @_Z14releaseObjectTIU8__strongP11objc_objectEvT_(ptr noundef [[OBJ3]])
4444
releaseObjectT(makeObject1());
4545

46-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[X]], i8* null)
46+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[X]], ptr null)
4747
// CHECK-NEXT: ret void
4848
}
4949

@@ -56,14 +56,14 @@ void templateTest() {
5656

5757
// CHECK: define{{.*}} void @_ZN15ForwardConsumedC2EP11objc_object(
5858
// CHECK-NOT: objc_retain
59-
// CHECK: store i8* {{.*}}, i8** [[X:%.*]],
59+
// CHECK: store ptr %x, ptr [[X:%.*]],
6060
// CHECK-NOT: [[X]]
61-
// CHECK: call void @llvm.objc.storeStrong(i8** [[X]], i8* null)
61+
// CHECK: call void @llvm.objc.storeStrong(ptr [[X]], ptr null)
6262

6363
// CHECK: define{{.*}} void @_ZN15ForwardConsumedC1EP11objc_object(
6464
// CHECK-NOT: objc_retain
65-
// CHECK: store i8* {{.*}}, i8** [[X:%.*]],
66-
// CHECK: [[T0:%.*]] = load i8*, i8** [[X]],
67-
// CHECK-NEXT: store i8* null, i8** [[X]],
68-
// CHECK-NEXT: call void @_ZN15ForwardConsumedC2EP11objc_object({{.*}}, i8* noundef [[T0]])
69-
// CHECK: call void @llvm.objc.storeStrong(i8** [[X]], i8* null)
65+
// CHECK: store ptr %x, ptr [[X:%.*]],
66+
// CHECK: [[T0:%.*]] = load ptr, ptr [[X]],
67+
// CHECK-NEXT: store ptr null, ptr [[X]],
68+
// CHECK-NEXT: call void @_ZN15ForwardConsumedC2EP11objc_object({{.*}}, ptr noundef [[T0]])
69+
// CHECK: call void @llvm.objc.storeStrong(ptr [[X]], ptr null)

clang/test/CodeGenObjCXX/arc-constexpr.mm

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
1-
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-runtime-has-weak -o - -std=c++11 %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-runtime-has-weak -o - -std=c++11 %s | FileCheck %s
22

3-
// CHECK: %[[TYPE:[a-z0-9]+]] = type opaque
43
// CHECK: @[[CFSTRING:[a-z0-9_]+]] = private global %struct.__NSConstantString_tag
54
@class NSString;
65

76
// CHECK-LABEL: define{{.*}} void @_Z5test1v
8-
// CHECK: %[[ALLOCA:[A-Z]+]] = alloca %[[TYPE]]*
9-
// CHECK: %[[V0:[0-9]+]] = call i8* @llvm.objc.retain(i8* bitcast (%struct.__NSConstantString_tag* @[[CFSTRING]]
10-
// CHECK: %[[V1:[0-9]+]] = bitcast i8* %[[V0]] to %[[TYPE]]*
11-
// CHECK: store %[[TYPE]]* %[[V1]], %[[TYPE]]** %[[ALLOCA]]
12-
// CHECK: %[[V2:[0-9]+]] = bitcast %[[TYPE]]** %[[ALLOCA]]
13-
// CHECK: call void @llvm.objc.storeStrong(i8** %[[V2]], i8* null)
7+
// CHECK: %[[ALLOCA:[A-Z]+]] = alloca ptr
8+
// CHECK: %[[V0:[0-9]+]] = call ptr @llvm.objc.retain(ptr @[[CFSTRING]]
9+
// CHECK: store ptr %[[V0]], ptr %[[ALLOCA]]
10+
// CHECK: call void @llvm.objc.storeStrong(ptr %[[ALLOCA]], ptr null)
1411
void test1() {
1512
constexpr NSString *S = @"abc";
1613
}
1714

1815
// CHECK-LABEL: define{{.*}} void @_Z5test2v
19-
// CHECK: %[[CONST:[a-zA-Z]+]] = alloca %[[TYPE]]*
20-
// CHECK: %[[REF_CONST:[a-zA-Z]+]] = alloca %[[TYPE]]*
21-
// CHECK: %[[V0:[0-9]+]] = call i8* @llvm.objc.retain(i8* bitcast (%struct.__NSConstantString_tag* @[[CFSTRING]]
22-
// CHECK-NEXT: %[[V1:[0-9]+]] = bitcast i8* %[[V0]] to %[[TYPE]]*
23-
// CHECK-NEXT: store %[[TYPE]]* %[[V1]], %[[TYPE]]** %[[CONST]]
24-
// CHECK: %[[V2:[0-9]+]] = call i8* @llvm.objc.retain(i8* bitcast (%struct.__NSConstantString_tag* @[[CFSTRING]]
25-
// CHECK-NEXT: %[[V3:[0-9]+]] = bitcast i8* %[[V2]] to %[[TYPE]]*
26-
// CHECK-NEXT: store %[[TYPE]]* %[[V3]], %[[TYPE]]** %[[REF_CONST]]
27-
// CHECK: %[[V4:[0-9]+]] = bitcast %[[TYPE]]** %[[REF_CONST]]
28-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** %[[V4]], i8* null)
29-
// CHECK: %[[V5:[0-9]+]] = bitcast %[[TYPE]]** %[[CONST]]
30-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** %[[V5]], i8* null)
16+
// CHECK: %[[CONST:[a-zA-Z]+]] = alloca ptr
17+
// CHECK: %[[REF_CONST:[a-zA-Z]+]] = alloca ptr
18+
// CHECK: %[[V0:[0-9]+]] = call ptr @llvm.objc.retain(ptr @[[CFSTRING]]
19+
// CHECK-NEXT: store ptr %[[V0]], ptr %[[CONST]]
20+
// CHECK: %[[V2:[0-9]+]] = call ptr @llvm.objc.retain(ptr @[[CFSTRING]]
21+
// CHECK-NEXT: store ptr %[[V2]], ptr %[[REF_CONST]]
22+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr %[[REF_CONST]], ptr null)
23+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr %[[CONST]], ptr null)
3124
void test2() {
3225
constexpr NSString *Const = @"abc";
3326
// In IR RefConst should be initialized with Const initializer instead of
@@ -36,15 +29,12 @@ void test2() {
3629
}
3730

3831
// CHECK-LABEL: define{{.*}} void @_Z5test3v
39-
// CHECK: %[[WEAK_CONST:[a-zA-Z]+]] = alloca %[[TYPE]]*
40-
// CHECK: %[[REF_WEAK_CONST:[a-zA-Z]+]] = alloca %[[TYPE]]*
41-
// CHECK: %[[V0:[0-9]+]] = bitcast %[[TYPE]]** %[[WEAK_CONST]]
42-
// CHECK-NEXT: %[[V1:[0-9]+]] = call i8* @llvm.objc.initWeak(i8** %[[V0]], i8* bitcast (%struct.__NSConstantString_tag* @[[CFSTRING]]
43-
// CHECK: store %[[TYPE]]* bitcast (%struct.__NSConstantString_tag* @[[CFSTRING]] to %[[TYPE]]*), %[[TYPE]]** %[[REF_WEAK_CONST]]
44-
// CHECK: %[[V2:[0-9]+]] = bitcast %[[TYPE]]** %[[REF_WEAK_CONST]]
45-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** %[[V2]], i8* null)
46-
// CHECK: %[[V3:[0-9]+]] = bitcast %[[TYPE]]** %[[WEAK_CONST]]
47-
// CHECK-NEXT: call void @llvm.objc.destroyWeak(i8** %[[V3]])
32+
// CHECK: %[[WEAK_CONST:[a-zA-Z]+]] = alloca ptr
33+
// CHECK: %[[REF_WEAK_CONST:[a-zA-Z]+]] = alloca ptr
34+
// CHECK-NEXT: %[[V1:[0-9]+]] = call ptr @llvm.objc.initWeak(ptr %[[WEAK_CONST]], ptr @[[CFSTRING]]
35+
// CHECK: store ptr @[[CFSTRING]], ptr %[[REF_WEAK_CONST]]
36+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr %[[REF_WEAK_CONST]], ptr null)
37+
// CHECK-NEXT: call void @llvm.objc.destroyWeak(ptr %[[WEAK_CONST]])
4838
void test3() {
4939
__weak constexpr NSString *WeakConst = @"abc";
5040
NSString* RefWeakConst = WeakConst;
Lines changed: 52 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fexceptions -fobjc-exceptions -fcxx-exceptions -fobjc-runtime-has-weak -o - -fobjc-arc-exceptions %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fexceptions -fobjc-exceptions -fcxx-exceptions -fobjc-runtime-has-weak -o - -fobjc-arc-exceptions %s | FileCheck %s
22

33
@class Ety;
44

@@ -12,16 +12,12 @@ void test0(void) {
1212
}
1313
}
1414
// CHECK-LABEL: define{{.*}} void @_Z5test0v()
15-
// CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8
15+
// CHECK: [[E:%e]] = alloca ptr, align 8
1616
// CHECK-NEXT: invoke void @_Z12test0_helperv()
17-
// CHECK: [[T0:%.*]] = call i8* @objc_begin_catch(
18-
// CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to [[ETY]]*
19-
// CHECK-NEXT: [[T2:%.*]] = bitcast [[ETY]]* [[T1]] to i8*
20-
// CHECK-NEXT: [[T3:%.*]] = call i8* @llvm.objc.retain(i8* [[T2]]) [[NUW:#[0-9]+]]
21-
// CHECK-NEXT: [[T4:%.*]] = bitcast i8* [[T3]] to [[ETY]]*
22-
// CHECK-NEXT: store [[ETY]]* [[T4]], [[ETY]]** [[E]]
23-
// CHECK-NEXT: [[T0:%.*]] = bitcast [[ETY]]** [[E]] to i8**
24-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[T0]], i8* null) [[NUW]]
17+
// CHECK: [[T0:%.*]] = call ptr @objc_begin_catch(
18+
// CHECK-NEXT: [[T3:%.*]] = call ptr @llvm.objc.retain(ptr [[T0]]) [[NUW:#[0-9]+]]
19+
// CHECK-NEXT: store ptr [[T3]], ptr [[E]]
20+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[E]], ptr null) [[NUW]]
2521
// CHECK-NEXT: call void @objc_end_catch() [[NUW]]
2622

2723
void test1_helper(void);
@@ -32,15 +28,11 @@ void test1(void) {
3228
}
3329
}
3430
// CHECK-LABEL: define{{.*}} void @_Z5test1v()
35-
// CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8
31+
// CHECK: [[E:%e]] = alloca ptr, align 8
3632
// CHECK-NEXT: invoke void @_Z12test1_helperv()
37-
// CHECK: [[T0:%.*]] = call i8* @objc_begin_catch(
38-
// CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to [[ETY]]*
39-
// CHECK-NEXT: [[T2:%.*]] = bitcast [[ETY]]** [[E]] to i8**
40-
// CHECK-NEXT: [[T3:%.*]] = bitcast [[ETY]]* [[T1]] to i8*
41-
// CHECK-NEXT: call i8* @llvm.objc.initWeak(i8** [[T2]], i8* [[T3]]) [[NUW]]
42-
// CHECK-NEXT: [[T0:%.*]] = bitcast [[ETY]]** [[E]] to i8**
43-
// CHECK-NEXT: call void @llvm.objc.destroyWeak(i8** [[T0]]) [[NUW]]
33+
// CHECK: [[T0:%.*]] = call ptr @objc_begin_catch(
34+
// CHECK-NEXT: call ptr @llvm.objc.initWeak(ptr [[E]], ptr [[T0]]) [[NUW]]
35+
// CHECK-NEXT: call void @llvm.objc.destroyWeak(ptr [[E]]) [[NUW]]
4436
// CHECK-NEXT: call void @objc_end_catch() [[NUW]]
4537

4638
void test2_helper(void);
@@ -51,16 +43,12 @@ void test2(void) {
5143
}
5244
}
5345
// CHECK-LABEL: define{{.*}} void @_Z5test2v()
54-
// CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8
46+
// CHECK: [[E:%e]] = alloca ptr, align 8
5547
// CHECK-NEXT: invoke void @_Z12test2_helperv()
56-
// CHECK: [[T0:%.*]] = call i8* @__cxa_begin_catch(
57-
// CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to [[ETY]]*
58-
// CHECK-NEXT: [[T2:%.*]] = bitcast [[ETY]]* [[T1]] to i8*
59-
// CHECK-NEXT: [[T3:%.*]] = call i8* @llvm.objc.retain(i8* [[T2]]) [[NUW]]
60-
// CHECK-NEXT: [[T4:%.*]] = bitcast i8* [[T3]] to [[ETY]]*
61-
// CHECK-NEXT: store [[ETY]]* [[T4]], [[ETY]]** [[E]]
62-
// CHECK-NEXT: [[T0:%.*]] = bitcast [[ETY]]** [[E]] to i8**
63-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[T0]], i8* null) [[NUW]]
48+
// CHECK: [[T0:%.*]] = call ptr @__cxa_begin_catch(
49+
// CHECK-NEXT: [[T3:%.*]] = call ptr @llvm.objc.retain(ptr [[T0]]) [[NUW]]
50+
// CHECK-NEXT: store ptr [[T3]], ptr [[E]]
51+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[E]], ptr null) [[NUW]]
6452
// CHECK-NEXT: call void @__cxa_end_catch() [[NUW]]
6553

6654
void test3_helper(void);
@@ -71,15 +59,11 @@ void test3(void) {
7159
}
7260
}
7361
// CHECK-LABEL: define{{.*}} void @_Z5test3v()
74-
// CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8
62+
// CHECK: [[E:%e]] = alloca ptr, align 8
7563
// CHECK-NEXT: invoke void @_Z12test3_helperv()
76-
// CHECK: [[T0:%.*]] = call i8* @__cxa_begin_catch(
77-
// CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to [[ETY]]*
78-
// CHECK-NEXT: [[T2:%.*]] = bitcast [[ETY]]** [[E]] to i8**
79-
// CHECK-NEXT: [[T3:%.*]] = bitcast [[ETY]]* [[T1]] to i8*
80-
// CHECK-NEXT: call i8* @llvm.objc.initWeak(i8** [[T2]], i8* [[T3]]) [[NUW]]
81-
// CHECK-NEXT: [[T0:%.*]] = bitcast [[ETY]]** [[E]] to i8**
82-
// CHECK-NEXT: call void @llvm.objc.destroyWeak(i8** [[T0]]) [[NUW]]
64+
// CHECK: [[T0:%.*]] = call ptr @__cxa_begin_catch(
65+
// CHECK-NEXT: call ptr @llvm.objc.initWeak(ptr [[E]], ptr [[T0]]) [[NUW]]
66+
// CHECK-NEXT: call void @llvm.objc.destroyWeak(ptr [[E]]) [[NUW]]
8367
// CHECK-NEXT: call void @__cxa_end_catch() [[NUW]]
8468

8569
namespace test4 {
@@ -94,29 +78,28 @@ void test3(void) {
9478
throw 0;
9579
}
9680
// CHECK-LABEL: define{{.*}} void @_ZN5test41AC2Ev(
97-
// CHECK: [[THIS:%.*]] = load [[A:%.*]]*, [[A:%.*]]** {{%.*}}
81+
// CHECK: [[THIS:%.*]] = load ptr, ptr {{%.*}}
9882
// Construct single.
99-
// CHECK-NEXT: [[SINGLE:%.*]] = getelementptr inbounds [[A]], [[A]]* [[THIS]], i32 0, i32 0
100-
// CHECK-NEXT: store i8* null, i8** [[SINGLE]], align 8
83+
// CHECK-NEXT: [[SINGLE:%.*]] = getelementptr inbounds [[A:%.*]], ptr [[THIS]], i32 0, i32 0
84+
// CHECK-NEXT: store ptr null, ptr [[SINGLE]], align 8
10185
// Construct array.
102-
// CHECK-NEXT: [[ARRAY:%.*]] = getelementptr inbounds [[A]], [[A]]* [[THIS]], i32 0, i32 1
103-
// CHECK-NEXT: [[T0:%.*]] = bitcast [2 x [3 x i8*]]* [[ARRAY]] to i8*
104-
// CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* align 8 [[T0]], i8 0, i64 48, i1 false)
86+
// CHECK-NEXT: [[ARRAY:%.*]] = getelementptr inbounds [[A:%.*]], ptr [[THIS]], i32 0, i32 1
87+
// CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[ARRAY]], i8 0, i64 48, i1 false)
10588
// throw 0;
10689
// CHECK: invoke void @__cxa_throw(
10790
// Landing pad from throw site:
10891
// CHECK: landingpad
10992
// - First, destroy all of array.
110-
// CHECK: [[ARRAYBEGIN:%.*]] = getelementptr inbounds [2 x [3 x i8*]], [2 x [3 x i8*]]* [[ARRAY]], i32 0, i32 0, i32 0
111-
// CHECK-NEXT: [[ARRAYEND:%.*]] = getelementptr inbounds i8*, i8** [[ARRAYBEGIN]], i64 6
93+
// CHECK: [[ARRAYBEGIN:%.*]] = getelementptr inbounds [2 x [3 x ptr]], ptr [[ARRAY]], i32 0, i32 0, i32 0
94+
// CHECK-NEXT: [[ARRAYEND:%.*]] = getelementptr inbounds ptr, ptr [[ARRAYBEGIN]], i64 6
11295
// CHECK-NEXT: br label
113-
// CHECK: [[AFTER:%.*]] = phi i8** [ [[ARRAYEND]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
114-
// CHECK-NEXT: [[ELT]] = getelementptr inbounds i8*, i8** [[AFTER]], i64 -1
115-
// CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[ELT]], i8* null) [[NUW]]
116-
// CHECK-NEXT: [[DONE:%.*]] = icmp eq i8** [[ELT]], [[ARRAYBEGIN]]
96+
// CHECK: [[AFTER:%.*]] = phi ptr [ [[ARRAYEND]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
97+
// CHECK-NEXT: [[ELT]] = getelementptr inbounds ptr, ptr [[AFTER]], i64 -1
98+
// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[ELT]], ptr null) [[NUW]]
99+
// CHECK-NEXT: [[DONE:%.*]] = icmp eq ptr [[ELT]], [[ARRAYBEGIN]]
117100
// CHECK-NEXT: br i1 [[DONE]],
118101
// - Next, destroy single.
119-
// CHECK: call void @llvm.objc.storeStrong(i8** [[SINGLE]], i8* null) [[NUW]]
102+
// CHECK: call void @llvm.objc.storeStrong(ptr [[SINGLE]], ptr null) [[NUW]]
120103
// CHECK: br label
121104
// CHECK: resume
122105
}
@@ -132,26 +115,26 @@ void test5(void) {
132115
};
133116
}
134117
// CHECK-LABEL: define{{.*}} void @_Z5test5v()
135-
// CHECK: [[ARRAY:%.*]] = alloca [2 x [2 x i8*]], align
136-
// CHECK: [[A0:%.*]] = getelementptr inbounds [2 x [2 x i8*]], [2 x [2 x i8*]]* [[ARRAY]], i64 0, i64 0
137-
// CHECK-NEXT: store [2 x i8*]* [[A0]],
138-
// CHECK-NEXT: [[A00:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[A0]], i64 0, i64 0
139-
// CHECK-NEXT: store i8** [[A00]],
140-
// CHECK-NEXT: [[T0:%.*]] = invoke noundef i8* @_Z12test5_helperj(i32 noundef 0)
141-
// CHECK: store i8* [[T0]], i8** [[A00]], align
142-
// CHECK-NEXT: [[A01:%.*]] = getelementptr inbounds i8*, i8** [[A00]], i64 1
143-
// CHECK-NEXT: store i8** [[A01]],
144-
// CHECK-NEXT: [[T0:%.*]] = invoke noundef i8* @_Z12test5_helperj(i32 noundef 1)
145-
// CHECK: store i8* [[T0]], i8** [[A01]], align
146-
// CHECK-NEXT: [[A1:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[A0]], i64 1
147-
// CHECK-NEXT: store [2 x i8*]* [[A1]],
148-
// CHECK-NEXT: [[A10:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[A1]], i64 0, i64 0
149-
// CHECK-NEXT: store i8** [[A10]],
150-
// CHECK-NEXT: [[T0:%.*]] = invoke noundef i8* @_Z12test5_helperj(i32 noundef 2)
151-
// CHECK: store i8* [[T0]], i8** [[A10]], align
152-
// CHECK-NEXT: [[A11:%.*]] = getelementptr inbounds i8*, i8** [[A10]], i64 1
153-
// CHECK-NEXT: store i8** [[A11]],
154-
// CHECK-NEXT: [[T0:%.*]] = invoke noundef i8* @_Z12test5_helperj(i32 noundef 3)
155-
// CHECK: store i8* [[T0]], i8** [[A11]], align
118+
// CHECK: [[ARRAY:%.*]] = alloca [2 x [2 x ptr]], align
119+
// CHECK: [[A0:%.*]] = getelementptr inbounds [2 x [2 x ptr]], ptr [[ARRAY]], i64 0, i64 0
120+
// CHECK-NEXT: store ptr [[A0]],
121+
// CHECK-NEXT: [[A00:%.*]] = getelementptr inbounds [2 x ptr], ptr [[A0]], i64 0, i64 0
122+
// CHECK-NEXT: store ptr [[A00]],
123+
// CHECK-NEXT: [[T0:%.*]] = invoke noundef ptr @_Z12test5_helperj(i32 noundef 0)
124+
// CHECK: store ptr [[T0]], ptr [[A00]], align
125+
// CHECK-NEXT: [[A01:%.*]] = getelementptr inbounds ptr, ptr [[A00]], i64 1
126+
// CHECK-NEXT: store ptr [[A01]],
127+
// CHECK-NEXT: [[T0:%.*]] = invoke noundef ptr @_Z12test5_helperj(i32 noundef 1)
128+
// CHECK: store ptr [[T0]], ptr [[A01]], align
129+
// CHECK-NEXT: [[A1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[A0]], i64 1
130+
// CHECK-NEXT: store ptr [[A1]],
131+
// CHECK-NEXT: [[A10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[A1]], i64 0, i64 0
132+
// CHECK-NEXT: store ptr [[A10]],
133+
// CHECK-NEXT: [[T0:%.*]] = invoke noundef ptr @_Z12test5_helperj(i32 noundef 2)
134+
// CHECK: store ptr [[T0]], ptr [[A10]], align
135+
// CHECK-NEXT: [[A11:%.*]] = getelementptr inbounds ptr, ptr [[A10]], i64 1
136+
// CHECK-NEXT: store ptr [[A11]],
137+
// CHECK-NEXT: [[T0:%.*]] = invoke noundef ptr @_Z12test5_helperj(i32 noundef 3)
138+
// CHECK: store ptr [[T0]], ptr [[A11]], align
156139

157140
// CHECK: attributes [[NUW]] = { nounwind }

clang/test/CodeGenObjCXX/arc-globals.mm

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -O2 -disable-llvm-passes -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -O2 -disable-llvm-passes -o - %s | FileCheck %s
22

33
// Test that we're properly retaining lifetime-qualified pointers
44
// initialized statically and wrapping up those initialization in an
55
// autorelease pool.
66
id getObject();
77

88
// CHECK-LABEL: define internal void @__cxx_global_var_init
9-
// CHECK: call noundef i8* @_Z9getObjectv{{.*}} [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
9+
// CHECK: call noundef ptr @_Z9getObjectv{{.*}} [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
1010
// CHECK-NEXT: call void (...) @llvm.objc.clang.arc.noop.use
11-
// CHECK-NEXT: {{store i8*.*@global_obj}}
11+
// CHECK-NEXT: {{store ptr.*@global_obj}}
1212
// CHECK-NEXT: ret void
1313
id global_obj = getObject();
1414

1515
// CHECK-LABEL: define internal void @__cxx_global_var_init
16-
// CHECK: call noundef i8* @_Z9getObjectv{{.*}} [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ]
16+
// CHECK: call noundef ptr @_Z9getObjectv{{.*}} [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
1717
// CHECK-NEXT: call void (...) @llvm.objc.clang.arc.noop.use
18-
// CHECK-NEXT: {{store i8*.*@global_obj2}}
18+
// CHECK-NEXT: {{store ptr.*@global_obj2}}
1919
// CHECK-NEXT: ret void
2020
id global_obj2 = getObject();
2121

2222
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_arc_globals.mm
23-
// CHECK: call i8* @llvm.objc.autoreleasePoolPush()
23+
// CHECK: call ptr @llvm.objc.autoreleasePoolPush()
2424
// CHECK-NEXT: call void @__cxx_global_var_init
2525
// CHECK-NEXT: call void @__cxx_global_var_init.1
2626
// CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop(

0 commit comments

Comments
 (0)