You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Swiftify] Update availability for CxxSpan<->Span, fix lifetimebound
on parameters with reference type
Because swift-ide-test doesn't care about typechecking,
std-span-interface.swift passed despite containing 2 separate errors.
This updates the test file to properly exercise the entire compilation
pipeline for the macro expansions, by running swift-frontend
-emit-module and calling each macro expansion.
The first issue was that CxxSpan initializers taking [Mutable]Span still
had their availability set to Swift 6.2+, even after back-deploying
caused [Mutable]Span to have availability back to Swift 5.0. Since
_SwiftifyImport expansions copy the availbility of Span, this resulted
in the macro expansions calling unavailable initializers.
Interestingly enough, this manifested itself in the form of a tripped
assert in SIL verification, because although we do now typecheck the
expansions from _SwiftifyImport, the compilation can still keep going
after `shouldEmitFunctionBody` returns false: the macro expansion
declaration is still there, but is now missing its definition, despite
not being external.
The second issue was when parameters with C++ reference types were
annotated with `[[clang::lifetimebound]]`. For parameters with a
type that is `Escapable`, this is normally done using
`@lifetime(borrow foo)`. However C++ reference parameters are
imported as `inout`, which requires the `@lifetime(&foo)` syntax.
rdar://151493400
rdar://151670224
0 commit comments