[Clang importer] Make sure that the first argument of Set/Dictionary types are Hashable. #10602
+29
−8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Explanation: Eliminate a crash due to importing an Objective-C API with a
Set
orDictionary
aren't that is a non-Hashable
struct
orenum
type. For example, instead of importingNSSet<NSSet<id>>
as the nonsensical typeSet<Set<Any>>
(becauseSet
isn'tHashable
), import it as the saferSet<AnyHashable>
.Scope: The scope of the fix is pretty limited, since Swift would complain or crash if you ever actually tried to import such an API. However, see Risk.
Radar: rdar://problem/30622665
Risk: The fix performs a conformance check in a new place in the Clang importer. We have seen some problems with performing conformance checks elsewhere in the Clang importer that manifest as circularity issues that would crash the compiler. It's hard to assess whether such circularities will come up beyond just "qualify the compiler and see if it breaks".
Testing: Compiler regression testing.