mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
We can't really treat them as always-initialized because that makes move checking think that there's a value to destroy even on initialization, causing deinits to run on uninitialized memory. Remove my previous hack, and use a `zeroInitializer` to initialize the value state when emitting `init`, which is where we really need the bootstrapping-into-initialized behavior. rdar://113057256
36 lines
644 B
Swift
36 lines
644 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift -enable-experimental-feature RawLayout %s -o %t/a.out
|
|
// RUN: %target-codesign %t/a.out
|
|
// RUN: %target-run %t/a.out | %FileCheck %s
|
|
// REQUIRES: executable_test
|
|
|
|
@_rawLayout(size: 16, alignment: 16)
|
|
struct Foo: ~Copyable {
|
|
init(_ value: Int) {
|
|
print("Foo.init(\(value))")
|
|
}
|
|
|
|
deinit {
|
|
print("Foo.deinit")
|
|
}
|
|
|
|
func bar() {
|
|
print("Foo.bar()")
|
|
}
|
|
}
|
|
|
|
func test() {
|
|
let foo = Foo(42)
|
|
foo.bar()
|
|
}
|
|
|
|
print("-- start")
|
|
test()
|
|
print("-- done")
|
|
|
|
// CHECK: -- start
|
|
// CHECK-NEXT: Foo.init(42)
|
|
// CHECK-NEXT: Foo.bar()
|
|
// CHECK-NEXT: Foo.deinit
|
|
// CHECK-NEXT: -- done
|