mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
DeclContext::lookupQualified() no longer calls addImplicitContructors(), so we have to do it ourselves here, otherwise we accept code that used to be rejected in Swift 5.2.
57 lines
1.6 KiB
Swift
57 lines
1.6 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-emit-silgen %s | %FileCheck %s
|
|
|
|
// Test that the storage wrapper for a final property is itself final, and that
|
|
// its accessors do not appear in the vtable.
|
|
|
|
public class MyClass {
|
|
public init() { }
|
|
|
|
@PropertyWrapper()
|
|
public static var staticProperty: Bool
|
|
|
|
@PropertyWrapper()
|
|
public final var instanceProperty: Bool
|
|
|
|
}
|
|
|
|
@propertyWrapper
|
|
public struct PropertyWrapper {
|
|
public init() { }
|
|
|
|
public var projectedValue: PropertyWrapper {
|
|
get {
|
|
return self
|
|
}
|
|
set {
|
|
self = newValue
|
|
}
|
|
}
|
|
|
|
public var wrappedValue: Bool {
|
|
return false
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @$s23property_wrappers_final17useStorageWrapperyyAA7MyClassCF : $@convention(thin) (@guaranteed MyClass) -> () {
|
|
public func useStorageWrapper(_ c: MyClass) {
|
|
// CHECK: function_ref @$s23property_wrappers_final7MyClassC15$staticPropertyAA0G7WrapperVvgZ
|
|
_ = MyClass.$staticProperty
|
|
|
|
// CHECK: function_ref @$s23property_wrappers_final7MyClassC15$staticPropertyAA0G7WrapperVvsZ
|
|
MyClass.$staticProperty = PropertyWrapper()
|
|
|
|
// CHECK: $s23property_wrappers_final7MyClassC17$instancePropertyAA0G7WrapperVvg
|
|
_ = c.$instanceProperty
|
|
|
|
// CHECK: $s23property_wrappers_final7MyClassC17$instancePropertyAA0G7WrapperVvs
|
|
c.$instanceProperty = PropertyWrapper()
|
|
|
|
// CHECK: return
|
|
}
|
|
|
|
// CHECK-LABEL: sil_vtable [serialized] MyClass {
|
|
// CHECK-NEXT: #MyClass.init!allocator: (MyClass.Type) -> () -> MyClass : @$s23property_wrappers_final7MyClassCACycfC
|
|
// CHECK-NEXT: #MyClass.deinit!deallocator: @$s23property_wrappers_final7MyClassCfD
|
|
// CHECK-NEXT: }
|