Skip to content

Commit 9b4d9a0

Browse files
committed
Update CodeGen tests for constexpr and global initialization scenarios
1 parent 1509ebf commit 9b4d9a0

File tree

1 file changed

+43
-37
lines changed

1 file changed

+43
-37
lines changed
Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,56 @@
1-
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs
21
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++14 -emit-llvm -o - %s | FileCheck %s
32

4-
constexpr int b = 10;
5-
int test_char_cast() {
6-
const int f = (__builtin_assume_dereferenceable((char*)&b + 1, 3), 12);
7-
return f;
3+
int b = 10;
4+
const int f = (__builtin_assume_dereferenceable((char*)&b + 1, 3), 12);
5+
int use_f = f;
6+
7+
constexpr int g = 20;
8+
const int h = (__builtin_assume_dereferenceable((char*)&g + 1, 2), 42);
9+
int use_h = h;
10+
11+
constexpr char arr[] = "hello";
12+
constexpr const char* ptr = arr + 1;
13+
constexpr int fully_constexpr() {
14+
__builtin_assume_dereferenceable(ptr, 2);
15+
return 100;
816
}
17+
constexpr int i = fully_constexpr();
18+
int use_i = i;
919

10-
constexpr long long ll = 100;
11-
int test_void_cast() {
12-
const int h = (__builtin_assume_dereferenceable((void*)&ll, 8), 99);
13-
return h;
20+
void test_integral_ptr() {
21+
__builtin_assume_dereferenceable((int*)0x1234, 4);
1422
}
1523

16-
constexpr int gb = 10;
17-
const int gf = (__builtin_assume_dereferenceable((char*)&gb + 1, 3), 12);
18-
int ga = gf;
24+
void test_nullptr() {
25+
__builtin_assume_dereferenceable(nullptr, 0);
26+
}
1927

20-
// CHECK-LABEL: test_char_castv
21-
// CHECK: [[F:%.*]] = alloca i32, align 4
22-
// CHECK-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @_ZL1b, i64 1), i64 3) ]
23-
// CHECK-NEXT: store i32 12, ptr [[F]], align 4
24-
// CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[F]], align 4
25-
// CHECK-NEXT: ret i32 [[TMP0]]
26-
//
27-
//
28-
// CHECK-LABEL: test_void_castv
29-
// CHECK: [[H:%.*]] = alloca i32, align 4
30-
// CHECK-NEXT: store i32 99, ptr [[H]], align 4
31-
// CHECK-NEXT: ret i32 99
32-
//
28+
void test_zero_size() {
29+
int x = 10;
30+
__builtin_assume_dereferenceable(&x, 0);
31+
}
32+
33+
void test_function_ptr() {
34+
__builtin_assume_dereferenceable((void*)&test_zero_size, 8);
35+
}
36+
37+
// CHECK: @use_i = global i32 100
3338
//
34-
// CHECK-LABEL: __cxx_global_var_init
35-
// CHECK: [[TMP0:%.*]] = load i32, ptr @_ZL2gf, align 4
36-
// CHECK-NEXT: store i32 [[TMP0]], ptr @ga, align 4
37-
// CHECK-NEXT: ret void
39+
// CHECK: @{{_Z[0-9]+}}test_integral_ptrv
40+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr inttoptr (i64 4660 to ptr), i64 4) ]
3841
//
42+
// CHECK: @{{_Z[0-9]+}}test_nullptrv
43+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr null, i64 0) ]
3944
//
40-
// CHECK-LABEL: __cxx_global_var_init.1
41-
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @_ZL2gb, i64 1), i64 3) ]
42-
// CHECK-NEXT: store i32 12, ptr @_ZL2gf, align 4
43-
// CHECK-NEXT: ret void
45+
// CHECK: @{{_Z[0-9]+}}test_zero_sizev
46+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr {{%.*}}, i64 0) ]
4447
//
48+
// CHECK: @{{_Z[0-9]+}}test_function_ptrv
49+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr @{{_Z[0-9]+}}test_zero_sizev, i64 8) ]
4550
//
46-
// CHECK-LABEL: _GLOBAL__sub_I_builtin_assume_dereferenceable_constexpr.cpp
47-
// CHECK: call void @__cxx_global_var_init.1()
48-
// CHECK-NEXT: call void @__cxx_global_var_init()
49-
// CHECK-NEXT: ret void
51+
// CHECK: __cxx_global_var_init
52+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @b, i64 1), i64 3) ]
5053
//
54+
// CHECK: __cxx_global_var_init
55+
// CHECK: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr getelementptr inbounds (i8, ptr @{{_ZL[0-9]+}}g, i64 1), i64 2) ]
56+
// CHECK: store i32 42, ptr @{{_ZL[0-9]+}}h

0 commit comments

Comments
 (0)