Skip to content

Ban constructing normal conformances where the conforming type is a protocol #60716

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

slavapestov
Copy link
Contributor

@slavapestov slavapestov commented Aug 22, 2022

While ModuleDecl::lookupConformance() never returned a NormalProtocolConformance when given a protocol type, the conformance lookup table operations were more than happy to construct one directly if called on a protocol as the nominal type declaration. This could even trigger conformance checking, which would fail in odd ways when trying to derive type witnesses for example.

This represents wasted work and potential crashes from constructing a representation of something we never intended to exist.

One consequence is that the API digester and symbol graph model protocol inheritance as "conformances" in their schemas, which feels wrong, but I maintained the exact behavior by adding a bit of extra boilerplate at various call sites.

@slavapestov slavapestov marked this pull request as ready for review August 22, 2022 23:38
@slavapestov slavapestov force-pushed the ban-normal-conformances-of-protocols branch from 6611b25 to 50aaaa4 Compare August 23, 2022 04:06
@slavapestov
Copy link
Contributor Author

@swift-ci Please smoke test

@slavapestov
Copy link
Contributor Author

@swift-ci Please test source compatibility

@slavapestov slavapestov merged commit e14fefb into swiftlang:main Aug 23, 2022
ahoppen added a commit to ahoppen/swift that referenced this pull request Aug 24, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.
ahoppen added a commit to ahoppen/swift that referenced this pull request Aug 24, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.

rdar://99096663
ahoppen added a commit to ahoppen/swift that referenced this pull request Aug 24, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.

rdar://99096663
ahoppen added a commit to ahoppen/swift that referenced this pull request Aug 24, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.

rdar://99096663
ahoppen added a commit to ahoppen/swift that referenced this pull request Aug 26, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.

rdar://99096663
meg-gupta pushed a commit to meg-gupta/swift that referenced this pull request Aug 27, 2022
…tocols of a ProtocolDecl changed

swiftlang#60716 changed `NominalTypeDecl::getAllProtocols` to no longer work on `ProtocolDecl`. Add a new wrapper to Refactoring.cpp that dispatches to either `getInheritedProtocols` or `getAllProtocols` depending on whether the type is a protocol or not.

rdar://99096663
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant