Skip to content

Commit 01fea56

Browse files
committed
RequirementMachine: Skip emitting diagnostics containing ErrorTypes
1 parent b94d6eb commit 01fea56

File tree

5 files changed

+25
-9
lines changed

5 files changed

+25
-9
lines changed

lib/AST/RequirementMachine/RequirementLowering.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -725,16 +725,25 @@ bool swift::rewriting::diagnoseRequirementErrors(
725725
auto requirement = error.requirement;
726726
auto conflict = error.conflictingRequirement;
727727

728+
if (requirement.getFirstType()->hasError() ||
729+
(requirement.getKind() != RequirementKind::Layout &&
730+
requirement.getSecondType()->hasError())) {
731+
// Don't emit a cascading error.
732+
break;
733+
}
734+
728735
if (!conflict) {
729-
if (requirement.getFirstType()->hasError() ||
730-
requirement.getSecondType()->hasError()) {
731-
// Don't emit a cascading error.
732-
break;
733-
}
734736
ctx.Diags.diagnose(loc, diag::requires_same_concrete_type,
735737
requirement.getFirstType(),
736738
requirement.getSecondType());
737739
} else {
740+
if (conflict->getFirstType()->hasError() ||
741+
(conflict->getKind() != RequirementKind::Layout &&
742+
conflict->getSecondType()->hasError())) {
743+
// Don't emit a cascading error.
744+
break;
745+
}
746+
738747
auto options = PrintOptions::forDiagnosticArguments();
739748
std::string requirements;
740749
llvm::raw_string_ostream OS(requirements);
@@ -754,6 +763,13 @@ bool swift::rewriting::diagnoseRequirementErrors(
754763

755764
case RequirementError::Kind::RedundantRequirement: {
756765
auto requirement = error.requirement;
766+
if (requirement.getFirstType()->hasError() ||
767+
(requirement.getKind() != RequirementKind::Layout &&
768+
requirement.getSecondType()->hasError())) {
769+
// Don't emit a cascading error.
770+
break;
771+
}
772+
757773
switch (requirement.getKind()) {
758774
case RequirementKind::SameType:
759775
ctx.Diags.diagnose(loc, diag::redundant_same_type_to_concrete,

test/Generics/invalid.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on
22

33
protocol he where A : B { // expected-error {{cannot find type 'A' in scope}}
44
// expected-error@-1 {{cannot find type 'B' in scope}}

test/decl/protocol/req/associated_type_inference.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on
22

33
protocol P0 {
44
associatedtype Assoc1 : PSimple // expected-note{{ambiguous inference of associated type 'Assoc1': 'Double' vs. 'Int'}}

validation-test/compiler_crashers_2_fixed/0159-rdar40009245.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on
22

33
protocol P {
44
associatedtype A : P where A.X == Self

validation-test/compiler_crashers_2_fixed/0161-sr6569.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on
22

33
protocol P {
44
associatedtype A: P // expected-note {{protocol requires nested type 'A'; do you want to add it?}}

0 commit comments

Comments
 (0)