No dummy constraint in the public swiftinterface for SPI extensions

rdar://problem/63352700
This commit is contained in:
Alexis Laferrière
2020-05-18 20:54:20 -07:00
parent 976890d73a
commit aa0f555cde
2 changed files with 32 additions and 3 deletions

View File

@@ -345,12 +345,18 @@ public:
/// in \p map.
///
/// \sa recordConditionalConformances
static void collectSkippedConditionalConformances(PerTypeMap &map,
const Decl *D) {
static void collectSkippedConditionalConformances(
PerTypeMap &map,
const Decl *D,
const PrintOptions &printOptions) {
auto *extension = dyn_cast<ExtensionDecl>(D);
if (!extension || !extension->isConstrainedExtension())
return;
// Skip SPI extensions in the public interface.
if (!printOptions.PrintSPIs && extension->isSPI())
return;
const NominalTypeDecl *nominal = extension->getExtendedNominal();
if (!isPublicOrUsableFromInline(nominal))
return;
@@ -497,8 +503,9 @@ bool swift::emitSwiftInterface(raw_ostream &out,
if (!D->shouldPrintInContext(printOptions) ||
!printOptions.shouldPrint(D)) {
InheritedProtocolCollector::collectSkippedConditionalConformances(
inheritedProtocolMap, D);
inheritedProtocolMap, D, printOptions);
continue;
}