@@ -549,14 +549,21 @@ void RewriteSystem::verifyRewriteRules(ValidityPolicy policy) const {
549
549
550
550
if (index != lhs.size () - 1 ) {
551
551
ASSERT_RULE (symbol.getKind () != Symbol::Kind::Layout);
552
- ASSERT_RULE (!symbol.hasSubstitutions ());
552
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::Superclass);
553
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::ConcreteType);
554
+ }
555
+
556
+ if (!rule.isLHSSimplified () &&
557
+ index != lhs.size () - 1 ) {
558
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::ConcreteConformance);
553
559
}
554
560
555
561
if (index != 0 ) {
556
562
ASSERT_RULE (symbol.getKind () != Symbol::Kind::GenericParam);
557
563
}
558
564
559
- if (index != 0 && index != lhs.size () - 1 ) {
565
+ if (!rule.isLHSSimplified () &&
566
+ index != 0 && index != lhs.size () - 1 ) {
560
567
ASSERT_RULE (symbol.getKind () != Symbol::Kind::Protocol);
561
568
}
562
569
}
@@ -585,13 +592,29 @@ void RewriteSystem::verifyRewriteRules(ValidityPolicy policy) const {
585
592
}
586
593
587
594
ASSERT_RULE (symbol.getKind () != Symbol::Kind::Layout);
588
- ASSERT_RULE (!symbol.hasSubstitutions ());
595
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::Superclass);
596
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::ConcreteType);
597
+
598
+ // Completion can introduce a rule of the form
599
+ //
600
+ // (T.[P] => T.[concrete: C : P])
601
+ //
602
+ // Such rules are immediately simplified away. Otherwise, we should
603
+ // never see a symbol with substitutions (concrete type, superclass,
604
+ // concrete conformance) on the right hand side of a rule.
605
+ if (!(rule.isRHSSimplified () &&
606
+ index == rhs.size () - 1 )) {
607
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::Superclass);
608
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::ConcreteType);
609
+ ASSERT_RULE (symbol.getKind () != Symbol::Kind::ConcreteConformance);
610
+ }
589
611
590
612
if (index != 0 ) {
591
613
ASSERT_RULE (symbol.getKind () != Symbol::Kind::GenericParam);
592
614
}
593
615
594
- if (index != 0 && !rule.isRHSSimplified ()) {
616
+ if (!rule.isRHSSimplified () &&
617
+ index != 0 ) {
595
618
ASSERT_RULE (symbol.getKind () != Symbol::Kind::Protocol);
596
619
}
597
620
}
0 commit comments