mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
95 lines
1.6 KiB
Swift
95 lines
1.6 KiB
Swift
#if BEFORE
|
|
|
|
var global: Int = 0
|
|
|
|
public struct ChangeEmptyToNonEmpty {
|
|
public init() {}
|
|
|
|
public var property: Int {
|
|
get { return global }
|
|
set { global = newValue }
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
public struct ChangeEmptyToNonEmpty {
|
|
public init() {
|
|
property = 0
|
|
}
|
|
|
|
public var property: Int
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
#if BEFORE
|
|
|
|
public struct ChangeSize {
|
|
public init() {
|
|
count = 0
|
|
}
|
|
|
|
public var count: Int
|
|
|
|
public func validate() -> Bool {
|
|
return true
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
public struct ChangeSize {
|
|
public init() {
|
|
_count = 0
|
|
_sign = 0
|
|
}
|
|
|
|
public var count: Int {
|
|
get { return _count * _sign }
|
|
set {
|
|
if newValue < 0 {
|
|
_count = -newValue
|
|
_sign = -1
|
|
} else {
|
|
_count = newValue
|
|
_sign = 1
|
|
}
|
|
}
|
|
}
|
|
|
|
private var _count: Int
|
|
private var _sign: Int
|
|
|
|
public func validate() -> Bool {
|
|
return (padding1 == 17 &&
|
|
padding2 == -12 &&
|
|
padding3 == 108 &&
|
|
padding4 == -7592)
|
|
}
|
|
|
|
// Some padding to grow the struct beyond what a fixed-size buffer
|
|
// can hold for a global. Use it as a canary to catch any memory
|
|
// corruption issues.
|
|
public var padding1: Int = 17
|
|
public var padding2: Int = -12
|
|
public var padding3: Int = 108
|
|
public var padding4: Int = -7592
|
|
}
|
|
|
|
#endif
|
|
|
|
// Test internal global variable hidden behind a public transparent
|
|
// interface
|
|
|
|
@usableFromInline var versionedGlobal: ChangeSize = ChangeSize()
|
|
|
|
@_transparent public func getVersionedGlobal() -> ChangeSize {
|
|
return versionedGlobal
|
|
}
|
|
|
|
@_transparent public func setVersionedGlobal(_ c: Int) {
|
|
versionedGlobal.count = c
|
|
}
|