Skip to content

Commit 38b6947

Browse files
committed
update test case for arm64e value witness table authentication
1 parent 290e527 commit 38b6947

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

test/Interop/SwiftToCxx/enums/swift-enum-extract-payload.swift

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,24 @@ public func makeUvw(_ x: Int) -> Uvw {
8787
// CHECK: class _impl_Bar {
8888
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
8989
// CHECK-NEXT: auto metadata = _impl::$s5Enums3BarVMa(0);
90-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
90+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
91+
// CHECK-NEXT: #ifdef __arm64e__
92+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
93+
// CHECK-NEXT: #else
94+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
95+
// CHECK-NEXT: #endif
9196
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
9297
// CHECK-NEXT: }
9398

9499
// CHECK: class _impl_Foo {
95100
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
96101
// CHECK-NEXT: auto metadata = _impl::$s5Enums3FooVMa(0);
97-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
102+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
103+
// CHECK-NEXT: #ifdef __arm64e__
104+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
105+
// CHECK-NEXT: #else
106+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
107+
// CHECK-NEXT: #endif
98108
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
99109
// CHECK-NEXT: }
100110

@@ -126,22 +136,37 @@ public func makeUvw(_ x: Int) -> Uvw {
126136
// CHECK: private:
127137
// CHECK: inline char * _Nonnull _destructiveProjectEnumData() {
128138
// CHECK-NEXT: auto metadata = _impl::$s5Enums16PrimitivePayloadOMa(0);
129-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
139+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
140+
// CHECK-NEXT: #ifdef __arm64e__
141+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
142+
// CHECK-NEXT: #else
143+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
144+
// CHECK-NEXT: #endif
130145
// CHECK-NEXT: const auto *enumVWTable = reinterpret_cast<swift::_impl::EnumValueWitnessTable *>(vwTable);
131146
// CHECK-NEXT: enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), metadata._0);
132147
// CHECK-NEXT: return _getOpaquePointer();
133148
// CHECK-NEXT: }
134149
// CHECK: class _impl_PrimitivePayload {
135150
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
136151
// CHECK-NEXT: auto metadata = _impl::$s5Enums16PrimitivePayloadOMa(0);
137-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
152+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
153+
// CHECK-NEXT: #ifdef __arm64e__
154+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
155+
// CHECK-NEXT: #else
156+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
157+
// CHECK-NEXT: #endif
138158
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
139159
// CHECK-NEXT: }
140160

141161
// CHECK: class _impl_Uvw {
142162
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
143163
// CHECK-NEXT: auto metadata = _impl::$s5Enums3UvwOMa(0);
144-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
164+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
165+
// CHECK-NEXT: #ifdef __arm64e__
166+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
167+
// CHECK-NEXT: #else
168+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
169+
// CHECK-NEXT: #endif
145170
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
146171
// CHECK-NEXT: }
147172

@@ -165,14 +190,24 @@ public func makeUvw(_ x: Int) -> Uvw {
165190
// CHECK: private:
166191
// CHECK: inline char * _Nonnull _destructiveProjectEnumData() {
167192
// CHECK-NEXT: auto metadata = _impl::$s5Enums3XyzOMa(0);
168-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
193+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
194+
// CHECK-NEXT: #ifdef __arm64e__
195+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
196+
// CHECK-NEXT: #else
197+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
198+
// CHECK-NEXT: #endif
169199
// CHECK-NEXT: const auto *enumVWTable = reinterpret_cast<swift::_impl::EnumValueWitnessTable *>(vwTable);
170200
// CHECK-NEXT: enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), metadata._0);
171201
// CHECK-NEXT: return _getOpaquePointer();
172202
// CHECK-NEXT: }
173203
// CHECK: class _impl_Xyz {
174204
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
175205
// CHECK-NEXT: auto metadata = _impl::$s5Enums3XyzOMa(0);
176-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
206+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
207+
// CHECK-NEXT: #ifdef __arm64e__
208+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
209+
// CHECK-NEXT: #else
210+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
211+
// CHECK-NEXT: #endif
177212
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
178213
// CHECK-NEXT: }

test/Interop/SwiftToCxx/structs/swift-struct-in-cxx.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@
5050
// CHECK-NEXT: }
5151
// CHECK-NEXT: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
5252
// CHECK-NEXT: auto metadata = _impl::$s7Structs18StructWithIntFieldVMa(0);
53-
// CHECK-NEXT: auto *vwTable = *(reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1);
53+
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
54+
// CHECK-NEXT: #ifdef __arm64e__
55+
// CHECK-NEXT: auto *vwTable = reinterpret_cast<swift::_impl::ValueWitnessTable *>(ptrauth_auth_data(reinterpret_cast<void *>(*vwTableAddr), ptrauth_key_process_independent_data, ptrauth_blend_discriminator(vwTableAddr, 11839)));
56+
// CHECK-NEXT: #else
57+
// CHECK-NEXT: auto *vwTable = *vwTableAddr;
58+
// CHECK-NEXT: #endif
5459
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
5560
// CHECK-NEXT: }
5661
// CHECK-NEXT: };

0 commit comments

Comments
 (0)