diff --git a/lib/Sema/TypeCheckAvailability.cpp b/lib/Sema/TypeCheckAvailability.cpp index 1dabd633b9a..d2fe2c44289 100644 --- a/lib/Sema/TypeCheckAvailability.cpp +++ b/lib/Sema/TypeCheckAvailability.cpp @@ -3456,6 +3456,12 @@ static bool declNeedsExplicitAvailability(const Decl *decl) { if (!ctx.supportsVersionedAvailability()) return false; + // Don't enforce explicit availability requirements in .swiftinterface files. + // These diagnostics are only designed to be emitted when building from + // source. + if (decl->getDeclContext()->isInSwiftinterface()) + return false; + // Skip non-public decls. if (auto valueDecl = dyn_cast(decl)) { AccessScope scope = diff --git a/test/ModuleInterface/require_explicit_availability.swift b/test/ModuleInterface/require_explicit_availability.swift new file mode 100644 index 00000000000..0d8369d351f --- /dev/null +++ b/test/ModuleInterface/require_explicit_availability.swift @@ -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 { }