@@ -2653,7 +2653,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
2653
2653
// Do this before visiting members, to avoid a request cycle if
2654
2654
// a member referenecs another declaration whose generic signature
2655
2655
// has a conformance requirement to this protocol.
2656
- auto reqSig = PD->getRequirementSignature (). getRequirements () ;
2656
+ auto reqSig = PD->getRequirementSignature ();
2657
2657
2658
2658
// Check the members.
2659
2659
for (auto Member : PD->getMembers ())
@@ -2669,8 +2669,9 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
2669
2669
TypeChecker::inferDefaultWitnesses (PD);
2670
2670
2671
2671
if (PD->getASTContext ().TypeCheckerOpts .DebugGenericSignatures ) {
2672
- auto requirementsSig =
2673
- GenericSignature::get ({PD->getProtocolSelfType ()}, reqSig);
2672
+ auto sig =
2673
+ GenericSignature::get ({PD->getProtocolSelfType ()},
2674
+ reqSig.getRequirements ());
2674
2675
2675
2676
llvm::errs () << " \n " ;
2676
2677
llvm::errs () << " Protocol requirement signature:\n " ;
@@ -2679,34 +2680,34 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
2679
2680
llvm::errs () << " Requirement signature: " ;
2680
2681
PrintOptions Opts;
2681
2682
Opts.ProtocolQualifiedDependentMemberTypes = true ;
2682
- requirementsSig ->print (llvm::errs (), Opts);
2683
+ sig ->print (llvm::errs (), Opts);
2683
2684
llvm::errs () << " \n " ;
2684
2685
2685
2686
llvm::errs () << " Canonical requirement signature: " ;
2686
- auto canRequirementSig =
2687
- CanGenericSignature::getCanonical (requirementsSig .getGenericParams (),
2688
- requirementsSig .getRequirements ());
2689
- canRequirementSig ->print (llvm::errs (), Opts);
2687
+ auto canSig =
2688
+ CanGenericSignature::getCanonical (sig .getGenericParams (),
2689
+ sig .getRequirements ());
2690
+ canSig ->print (llvm::errs (), Opts);
2690
2691
llvm::errs () << " \n " ;
2691
2692
}
2692
2693
2693
- if (getASTContext ().LangOpts .RequirementMachineProtocolSignatures ==
2694
- RequirementMachineMode::Disabled) {
2695
- #ifndef NDEBUG
2696
- // The GenericSignatureBuilder outputs incorrectly-minimized signatures
2697
- // sometimes, so only check invariants in asserts builds.
2698
- PD->getGenericSignature ().verify (reqSig);
2699
- #endif
2700
- } else {
2701
- // When using the Requirement Machine, always verify signatures.
2702
- // An incorrect signature indicates a serious problem which can cause
2703
- // miscompiles or inadvertent ABI dependencies on compiler bugs, so
2704
- // we really want to avoid letting one slip by.
2705
- PD->getGenericSignature ().verify (reqSig);
2694
+ if (!reqSig.getErrors ()) {
2695
+ if (getASTContext ().LangOpts .RequirementMachineProtocolSignatures ==
2696
+ RequirementMachineMode::Disabled) {
2697
+ #ifndef NDEBUG
2698
+ // The GenericSignatureBuilder outputs incorrectly-minimized signatures
2699
+ // sometimes, so only check invariants in asserts builds.
2700
+ PD->getGenericSignature ().verify (reqSig.getRequirements ());
2701
+ #endif
2702
+ } else {
2703
+ // When using the Requirement Machine, always verify signatures.
2704
+ // An incorrect signature indicates a serious problem which can cause
2705
+ // miscompiles or inadvertent ABI dependencies on compiler bugs, so
2706
+ // we really want to avoid letting one slip by.
2707
+ PD->getGenericSignature ().verify (reqSig.getRequirements ());
2708
+ }
2706
2709
}
2707
2710
2708
- (void ) reqSig;
2709
-
2710
2711
checkExplicitAvailability (PD);
2711
2712
}
2712
2713
0 commit comments