mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
PrintAsClang is supposed to emit declarations in the same order regardless of the compiler’s internal state, but we have repeatedly found that our current criteria are inadequate, resulting in non-functionality-affecting changes to generated header content. Add a diagnostic that’s emitted when this happens soliciting a bug report. Since there *should* be no cases where the compiler fails to order declarations, this diagnostic is never actually emitted. Instead, we test this change by enabling `-verify` on nearly all PrintAsClang tests to make sure they are unaffected. This did demonstrate a missing criterion that only mattered in C++ mode: extensions that varied only in their generic signature were not sorted stably. Add a sort criterion for this.
379 lines
18 KiB
Swift
379 lines
18 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend %s -module-name Class -clang-header-expose-decls=all-public -typecheck -verify -emit-clang-header-path %t/class.h
|
|
// RUN: %FileCheck %s < %t/class.h
|
|
|
|
// RUN: %check-interop-cxx-header-in-clang(%t/class.h -DSWIFT_CXX_INTEROP_HIDE_STL_OVERLAY)
|
|
|
|
// UNSUPPORTED: CPU=arm64e
|
|
|
|
public class BaseClass {
|
|
var field: Int64
|
|
|
|
init() {
|
|
field = 0
|
|
}
|
|
public func virtualMethod() {
|
|
print("BaseClass.virtualMethod")
|
|
}
|
|
public func virtualMethodIntInt(_ x: Int) -> Int {
|
|
return x
|
|
}
|
|
public final func finalMethodInBase(_ x: Int) -> Int {
|
|
return x * 2
|
|
}
|
|
|
|
public var virtualComputedProp: Int {
|
|
return 21
|
|
}
|
|
public var virtualComputedGetSet: Int64 {
|
|
get {
|
|
return field
|
|
}
|
|
set {
|
|
field = newValue
|
|
}
|
|
}
|
|
public var storedProp: Int = 0
|
|
|
|
public subscript(_ i: Int) -> Int {
|
|
return i
|
|
}
|
|
}
|
|
|
|
public class DerivedClass: BaseClass {
|
|
override init() {
|
|
super.init()
|
|
}
|
|
override public func virtualMethod() {
|
|
print("DerivedClass.virtualMethod")
|
|
}
|
|
override public func virtualMethodIntInt(_ x: Int) -> Int {
|
|
return -x
|
|
}
|
|
public func virtualMethodInDerived(_ x: BaseClass) -> BaseClass {
|
|
return x
|
|
}
|
|
|
|
override public var virtualComputedProp: Int {
|
|
return -75
|
|
}
|
|
override public var virtualComputedGetSet: Int64 {
|
|
get {
|
|
super.virtualComputedGetSet
|
|
}
|
|
set {
|
|
super.virtualComputedGetSet = newValue * 2
|
|
}
|
|
}
|
|
override public var storedProp: Int {
|
|
get {
|
|
return -super.storedProp
|
|
}
|
|
set {
|
|
super.storedProp = newValue
|
|
}
|
|
}
|
|
|
|
override public subscript(_ i: Int) -> Int {
|
|
return i * 2
|
|
}
|
|
}
|
|
|
|
public final class DerivedDerivedClass: DerivedClass {
|
|
override init() {
|
|
super.init()
|
|
}
|
|
override public func virtualMethod() {
|
|
print("DerivedDerivedClass.virtualMethod")
|
|
}
|
|
override public func virtualMethodInDerived(_ x: BaseClass) -> BaseClass {
|
|
return self
|
|
}
|
|
public func methodInDerivedDerived() {
|
|
print("DerivedDerivedClass.methodInDerivedDerived")
|
|
}
|
|
override public var storedProp: Int {
|
|
get {
|
|
return -super.storedProp
|
|
}
|
|
set {
|
|
super.storedProp = newValue + 1
|
|
}
|
|
}
|
|
public var storedPropInDerivedDerived: Int = 0
|
|
public var computedPropInDerivedDerived: Int { return 11 }
|
|
}
|
|
|
|
public func returnBaseClass() -> BaseClass {
|
|
return BaseClass()
|
|
}
|
|
|
|
public func returnDerivedClass() -> DerivedClass {
|
|
return DerivedClass()
|
|
}
|
|
|
|
public func returnDerivedDerivedClass() -> DerivedDerivedClass {
|
|
return DerivedDerivedClass()
|
|
}
|
|
|
|
// CHECK: void BaseClass::virtualMethod() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C13virtualMethodyyF) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM1:]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int BaseClass::virtualMethodIntInt(swift::Int x) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C016virtualMethodIntE0yS2iF) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM2:]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(x, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int BaseClass::finalMethodInBase(swift::Int x) {
|
|
// CHECK-NEXT: return Class::_impl::$s5Class04BaseA0C013finalMethodInB0yS2iF(x, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int BaseClass::getVirtualComputedProp() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C19virtualComputedPropSivg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM3:]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: int64_t BaseClass::getVirtualComputedGetSet() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C21virtualComputedGetSets5Int64Vvg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM4:]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void BaseClass::setVirtualComputedGetSet(int64_t newValue) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C21virtualComputedGetSets5Int64Vvs) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM5:]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(newValue, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int BaseClass::getStoredProp() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C10storedPropSivg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM7:]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void BaseClass::setStoredProp(swift::Int value) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0C10storedPropSivs) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM8:]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(value, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int BaseClass::operator [](swift::Int i) const
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class04BaseA0CyS2icig) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM10:]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(i, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void DerivedClass::virtualMethod() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C13virtualMethodyyF) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM1]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedClass::virtualMethodIntInt(swift::Int x) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C016virtualMethodIntE0yS2iF) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM2]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(x, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: BaseClass DerivedClass::virtualMethodInDerived(const BaseClass& x) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C015virtualMethodInB0yAA04BaseA0CAFF) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM11:]] / sizeof(void *));
|
|
// CHECK-NEXT: return _impl::_impl_BaseClass::makeRetained((* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(x), ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this)));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedClass::getVirtualComputedProp() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C19virtualComputedPropSivg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM3]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: int64_t DerivedClass::getVirtualComputedGetSet() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C21virtualComputedGetSets5Int64Vvg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM4]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void DerivedClass::setVirtualComputedGetSet(int64_t newValue) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C21virtualComputedGetSets5Int64Vvs) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM5]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(newValue, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedClass::getStoredProp() {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C10storedPropSivg) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM7]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void DerivedClass::setStoredProp(swift::Int newValue) {
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0C10storedPropSivs) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM8]] / sizeof(void *));
|
|
// CHECK-NEXT: (* fptrptr_->func)(newValue, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedClass::operator [](swift::Int i) const
|
|
// CHECK-NEXT: void ***selfPtr_ = reinterpret_cast<void ***>( ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: #ifdef __arm64e__
|
|
// CHECK-NEXT: void **vtable_ = ptrauth_auth_data(*selfPtr_, ptrauth_key_process_independent_data, ptrauth_blend_discriminator(selfPtr_,27361));
|
|
// CHECK-NEXT: #else
|
|
// CHECK-NEXT: void **vtable_ = *selfPtr_;
|
|
// CHECK-NEXT: #endif
|
|
// CHECK-NEXT: struct FTypeAddress {
|
|
// CHECK-NEXT: decltype(_impl::$s5Class07DerivedA0CyS2icig) * func;
|
|
// CHECK-NEXT: };
|
|
// CHECK-NEXT: FTypeAddress *fptrptr_ = reinterpret_cast<FTypeAddress *>(vtable_ + [[#VM10]] / sizeof(void *));
|
|
// CHECK-NEXT: return (* fptrptr_->func)(i, ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
|
|
// CHECK: void DerivedDerivedClass::virtualMethod() {
|
|
// CHECK-NEXT: _impl::$s5Class07DerivedbA0C13virtualMethodyyF(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: BaseClass DerivedDerivedClass::virtualMethodInDerived(const BaseClass& x) {
|
|
// CHECK-NEXT: return _impl::_impl_BaseClass::makeRetained(Class::_impl::$s5Class07DerivedbA0C015virtualMethodInB0yAA04BaseA0CAFF(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(x), ::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this)));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: void DerivedDerivedClass::methodInDerivedDerived() {
|
|
// CHECK-NEXT: _impl::$s5Class07DerivedbA0C08methodInbB0yyF(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedDerivedClass::getStoredProp() {
|
|
// CHECK-NEXT: return Class::_impl::$s5Class07DerivedbA0C10storedPropSivg(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: swift::Int DerivedDerivedClass::getComputedPropInDerivedDerived() {
|
|
// CHECK-NEXT: return Class::_impl::$s5Class07DerivedbA0C014computedPropInbB0Sivg(::swift::_impl::_impl_RefCountedClass::getOpaquePointer(*this));
|
|
// CHECK-NEXT: }
|