@@ -993,6 +993,15 @@ class InheritedProtocolConformance : public ProtocolConformance,
993993 }
994994};
995995
996+ // / Describes the kind of a builtin conformance.
997+ enum class BuiltinConformanceKind {
998+ // A builtin conformance that has been synthesized by the implementation.
999+ Synthesized = 0 ,
1000+ // A missing conformance that we have nonetheless synthesized so that
1001+ // we can diagnose it later.
1002+ Missing,
1003+ };
1004+
9961005// / A builtin conformance appears when a non-nominal type has a
9971006// / conformance that is synthesized by the implementation.
9981007class BuiltinProtocolConformance final : public RootProtocolConformance,
@@ -1002,15 +1011,17 @@ class BuiltinProtocolConformance final : public RootProtocolConformance,
10021011
10031012 ProtocolDecl *protocol;
10041013 GenericSignature genericSig;
1005- size_t numConditionalRequirements;
1014+ size_t numConditionalRequirements : 31 ;
1015+ unsigned builtinConformanceKind : 1 ;
10061016
10071017 size_t numTrailingObjects (OverloadToken<Requirement>) const {
10081018 return numConditionalRequirements;
10091019 }
10101020
10111021 BuiltinProtocolConformance (Type conformingType, ProtocolDecl *protocol,
10121022 GenericSignature genericSig,
1013- ArrayRef<Requirement> conditionalRequirements);
1023+ ArrayRef<Requirement> conditionalRequirements,
1024+ BuiltinConformanceKind kind);
10141025
10151026public:
10161027 // / Get the protocol being conformed to.
@@ -1024,6 +1035,16 @@ class BuiltinProtocolConformance final : public RootProtocolConformance,
10241035 return genericSig;
10251036 }
10261037
1038+ BuiltinConformanceKind getBuiltinConformanceKind () const {
1039+ return static_cast <BuiltinConformanceKind>(builtinConformanceKind);
1040+ }
1041+
1042+ // / Whether this represents a "missing" conformance that should be diagnosed
1043+ // / later.
1044+ bool isMissing () const {
1045+ return getBuiltinConformanceKind () == BuiltinConformanceKind::Missing;
1046+ }
1047+
10271048 // / Get any requirements that must be satisfied for this conformance to apply.
10281049 Optional<ArrayRef<Requirement>>
10291050 getConditionalRequirementsIfAvailable () const {
0 commit comments