diff --git a/stdlib/public/core/InlineArray.swift b/stdlib/public/core/InlineArray.swift index af4b93e337590..4224eed6a1356 100644 --- a/stdlib/public/core/InlineArray.swift +++ b/stdlib/public/core/InlineArray.swift @@ -587,6 +587,10 @@ extension InlineArray where Element: ~Copyable { @lifetime(borrow self) @_transparent borrowing get { + guard count > 0 else { + let span = Span() + return unsafe _overrideLifetime(span, borrowing: self) + } let span = unsafe Span(_unsafeStart: _protectedAddress, count: count) return unsafe _overrideLifetime(span, borrowing: self) } @@ -598,6 +602,10 @@ extension InlineArray where Element: ~Copyable { @lifetime(&self) @_transparent mutating get { + guard count > 0 else { + let span = MutableSpan() + return unsafe _overrideLifetime(span, mutating: &self) + } let span = unsafe MutableSpan( _unsafeStart: _protectedMutableAddress, count: count diff --git a/test/stdlib/Span/InlineSpanProperties.swift b/test/stdlib/Span/InlineSpanProperties.swift index 252d2990e9fac..e45eb0eff59c9 100644 --- a/test/stdlib/Span/InlineSpanProperties.swift +++ b/test/stdlib/Span/InlineSpanProperties.swift @@ -119,6 +119,16 @@ suite.test("InlineArray.span property (String)") } } +suite.test("InlineArray.span property (empty, aligned)") +.require(.stdlib_6_2).code { + guard #available(SwiftStdlib 6.2, *) else { return } + + let empty: InlineArray<0, Padded> = [] + let span = empty.span + expectTrue(span.isEmpty) + expectEqual(span.count, 0) +} + suite.test("InlineArray.mutableSpan property") .require(.stdlib_6_2).code { @@ -146,3 +156,14 @@ suite.test("InlineArray.mutableSpan property (String)") let s = span[3] expectTrue(s._isIdentical(to: v[3])) } + +suite.test("InlineArray.mutableSpan property (empty, aligned)") +.require(.stdlib_6_2).code +{ + guard #available(SwiftStdlib 6.2, *) else { return } + + var empty: InlineArray<0, Padded> = [] + var span = empty.mutableSpan + expectTrue(span.isEmpty) + expectEqual(span.count, 0) +}