@@ -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: }
0 commit comments