Sema: Avoid diagnosing required availability in swiftinterface files.

The `-require-explicit-availability` compiler flag is designed to help
developers find declarations that they've written with missing availability.
The flag is not printed in swiftinterface files, though, so if a module has
both `-library-level=api` and also has `-require-explicity-availability=ignore`
(as the Swift stdlib does) then the result is that superfluous diagnostics are
emitted when typechecking the emitted module interface that should have been
suppressed by the `ignore` flag. Suppress these diagnostics when typechecking
swiftinterface files since they are only designed to be seen by the owner of
the module when they are building the module from source and they don't have
much value in the context of interface verification.
This commit is contained in:
Allan Shortlidge
2025-03-31 09:43:27 -07:00
parent a1cdd336f0
commit b6a425ab6a
2 changed files with 18 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
// -require-explicit-availability is not printed in interfaces, so no warnings
// should be emitted when verifying the interface.
// RUN: %target-swift-emit-module-interface(%t_require.swiftinterface) -require-explicit-availability=warn %s
// RUN: %target-swift-typecheck-module-from-interface(%t_require.swiftinterface) -verify
// -library-level=api implies -require-explicit-availability=warn and it _is_
// printed in the interface. Still, no diagnostics about required explicit
// availability should be emitted when verifying the interface.
// RUN: %target-swift-emit-module-interface(%t_api.swiftinterface) -library-level=api %s
// RUN: %target-swift-typecheck-module-from-interface(%t_api.swiftinterface) -verify
public struct NoAvailability { }