Skip to content

Commit bfb95f3

Browse files
authored
Merge pull request swiftlang#69185 from kubamracek/embedded-retain-n-rawpointer
[embedded] Use Builtin.RawPointer as the argument type on swift_release_n
2 parents 0af4108 + c8a5ac0 commit bfb95f3

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

stdlib/public/core/EmbeddedRuntime.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,18 @@ func swift_retain_n_(object: UnsafeMutablePointer<HeapObject>, n: UInt32) -> Uns
154154
}
155155

156156
@_silgen_name("swift_release")
157-
public func swift_release(object: UnsafeMutablePointer<HeapObject>?) {
157+
public func swift_release(object: Builtin.RawPointer) {
158158
swift_release_n(object: object, n: 1)
159159
}
160160

161161
@_silgen_name("swift_release_n")
162-
public func swift_release_n(object: UnsafeMutablePointer<HeapObject>?, n: UInt32) {
162+
public func swift_release_n(object: Builtin.RawPointer, n: UInt32) {
163+
if Int(Builtin.ptrtoint_Word(object)) == 0 { return }
164+
let o = UnsafeMutablePointer<HeapObject>(object)
165+
swift_release_n_(object: o, n: n)
166+
}
167+
168+
public func swift_release_n_(object: UnsafeMutablePointer<HeapObject>?, n: UInt32) {
163169
guard let object else {
164170
return
165171
}

test/embedded/runtime-release.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// RUN: %target-run-simple-swift(%S/Inputs/print.swift -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
2+
// RUN: %target-run-simple-swift(%S/Inputs/print.swift -O -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
3+
// RUN: %target-run-simple-swift(%S/Inputs/print.swift -Osize -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
4+
5+
// REQUIRES: executable_test
6+
// REQUIRES: optimized_stdlib
7+
// REQUIRES: VENDOR=apple
8+
// REQUIRES: OS=macosx
9+
10+
@main
11+
struct Main {
12+
static func main() {
13+
test()
14+
print("Okay!")
15+
// CHECK: Okay!
16+
}
17+
}
18+
19+
func test() -> [Int] {
20+
var s: [Int] = []
21+
s += []
22+
return s
23+
}

0 commit comments

Comments
 (0)