@@ -87,14 +87,24 @@ public func makeUvw(_ x: Int) -> Uvw {
87
87
// CHECK: class _impl_Bar {
88
88
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
89
89
// 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
91
96
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
92
97
// CHECK-NEXT: }
93
98
94
99
// CHECK: class _impl_Foo {
95
100
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
96
101
// 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
98
108
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
99
109
// CHECK-NEXT: }
100
110
@@ -126,22 +136,37 @@ public func makeUvw(_ x: Int) -> Uvw {
126
136
// CHECK: private:
127
137
// CHECK: inline char * _Nonnull _destructiveProjectEnumData() {
128
138
// 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
130
145
// CHECK-NEXT: const auto *enumVWTable = reinterpret_cast<swift::_impl::EnumValueWitnessTable *>(vwTable);
131
146
// CHECK-NEXT: enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), metadata._0);
132
147
// CHECK-NEXT: return _getOpaquePointer();
133
148
// CHECK-NEXT: }
134
149
// CHECK: class _impl_PrimitivePayload {
135
150
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
136
151
// 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
138
158
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
139
159
// CHECK-NEXT: }
140
160
141
161
// CHECK: class _impl_Uvw {
142
162
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
143
163
// 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
145
170
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
146
171
// CHECK-NEXT: }
147
172
@@ -165,14 +190,24 @@ public func makeUvw(_ x: Int) -> Uvw {
165
190
// CHECK: private:
166
191
// CHECK: inline char * _Nonnull _destructiveProjectEnumData() {
167
192
// 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
169
199
// CHECK-NEXT: const auto *enumVWTable = reinterpret_cast<swift::_impl::EnumValueWitnessTable *>(vwTable);
170
200
// CHECK-NEXT: enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), metadata._0);
171
201
// CHECK-NEXT: return _getOpaquePointer();
172
202
// CHECK-NEXT: }
173
203
// CHECK: class _impl_Xyz {
174
204
// CHECK: static inline void initializeWithTake(char * _Nonnull destStorage, char * _Nonnull srcStorage) {
175
205
// 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
177
212
// CHECK-NEXT: vwTable->initializeWithTake(destStorage, srcStorage, metadata._0);
178
213
// CHECK-NEXT: }
0 commit comments