Files
swift-mirror/test/SILGen/trivial_address_only_switch.swift
Joe Groff df8ab6ee0b SILGen: Don't copy_addr [take] trivial address-only values.
This is a new case that comes up with `InlineArray`, since an `InlineArray`
with unknown count but known trivial element type is trivial but still
address-only due to its unknown size. We are inconsistent about whether
we emit formal copies or not of these values; they should generally
be unnecessary as long as the memory location of a value is sufficiently
long-lived, but the SIL verifier still reasonably considers a `[take]` as
an invalidation of the memory, even though at runtime a take is a no-op.
Since the take is unnecessary, we can just not take when we copy out of
a trivial address location. Fixes #84141 | rdar://160007939.
2025-09-12 11:44:41 -07:00

16 lines
452 B
Swift

// RUN: %target-swift-emit-silgen -verify -disable-availability-checking %s
public enum StreamYieldResult<let count: Int>: Sendable {
case literal(buffer: InlineArray<count, UInt8>)
case end(buffer: InlineArray<count, UInt8>, endIndex: Int)
public func buffer() -> InlineArray<count, UInt8> {
switch self {
case .literal(let b):
return b
case .end(let b, _):
return b
}
}
}