Skip to content

Commit e4fe119

Browse files
committed
[Clang][CodeGen] Add more tests. NFC.
1 parent cc0b21f commit e4fe119

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

clang/test/CodeGenCXX/catch-nullptr-and-nonzero-offset-in-offsetof-idiom.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,42 @@ uintptr_t get_offset_of_zero_storage() {
5050
return ((uintptr_t)(&(((T *)nullptr)->e2)));
5151
}
5252

53+
namespace std { typedef decltype(__nullptr) nullptr_t; }
54+
// CHECK-LABEL: @_Z29get_offset_of_y_integral_zerov(
55+
// CHECK-NEXT: entry:
56+
// CHECK-NEXT: ret i64 ptrtoint (ptr getelementptr ([[STRUCT_S:%.*]], ptr null, i32 0, i32 1) to i64)
57+
//
58+
uintptr_t get_offset_of_y_integral_zero() {
59+
return ((uintptr_t)(&(((S *)0)->y)));
60+
}
61+
62+
// CHECK-LABEL: @_Z37get_offset_of_y_integral_zero_voidptrv(
63+
// CHECK-NEXT: entry:
64+
// CHECK-NEXT: ret i64 ptrtoint (ptr getelementptr ([[STRUCT_S:%.*]], ptr null, i32 0, i32 1) to i64)
65+
//
66+
uintptr_t get_offset_of_y_integral_zero_voidptr() {
67+
return ((uintptr_t)(&(((S *)(void*)0)->y)));
68+
}
69+
70+
// CHECK-LABEL: @_Z25get_offset_of_y_nullptr_tv(
71+
// CHECK-NEXT: entry:
72+
// CHECK-NEXT: ret i64 ptrtoint (ptr getelementptr ([[STRUCT_S:%.*]], ptr null, i32 0, i32 1) to i64)
73+
//
74+
uintptr_t get_offset_of_y_nullptr_t() {
75+
return ((uintptr_t)(&(((S *)std::nullptr_t{})->y)));
76+
}
77+
78+
// CHECK-LABEL: @_Z32get_offset_of_y_nullptr_constantv(
79+
// CHECK-NEXT: entry:
80+
// CHECK-NEXT: [[NULL:%.*]] = alloca ptr, align 8
81+
// CHECK-NEXT: store ptr null, ptr [[NULL]], align 8
82+
// CHECK-NEXT: ret i64 ptrtoint (ptr getelementptr inbounds nuw ([[STRUCT_S:%.*]], ptr null, i32 0, i32 1) to i64)
83+
//
84+
uintptr_t get_offset_of_y_nullptr_constant() {
85+
constexpr void *null = nullptr;
86+
return ((uintptr_t)(&(((S *)null)->y)));
87+
}
88+
5389
// CHECK-LABEL: @_Z27get_offset_of_y_via_builtinv(
5490
// CHECK-NEXT: entry:
5591
// CHECK-NEXT: ret i64 4

0 commit comments

Comments
 (0)