Skip to content

Commit c17bdaf

Browse files
committed
[AST] Adjust Diagnostic transaction to only track pending errors
1 parent 1bfb0b0 commit c17bdaf

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

include/swift/AST/DiagnosticEngine.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,10 +1058,19 @@ namespace swift {
10581058
}
10591059
}
10601060

1061-
bool hasDiagnostics() const {
1062-
return std::distance(Engine.TentativeDiagnostics.begin() +
1063-
PrevDiagnostics,
1064-
Engine.TentativeDiagnostics.end()) > 0;
1061+
bool hasErrors() const {
1062+
ArrayRef<Diagnostic> diagnostics(Engine.TentativeDiagnostics.begin() +
1063+
PrevDiagnostics,
1064+
Engine.TentativeDiagnostics.end());
1065+
1066+
for (auto &diagnostic : diagnostics) {
1067+
auto behavior = Engine.state.determineBehavior(diagnostic.getID());
1068+
if (behavior == DiagnosticState::Behavior::Fatal ||
1069+
behavior == DiagnosticState::Behavior::Error)
1070+
return true;
1071+
}
1072+
1073+
return false;
10651074
}
10661075

10671076
/// Abort and close this transaction and erase all diagnostics

lib/Sema/BuilderTransform.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,7 +1719,7 @@ ConstraintSystem::matchFunctionBuilder(
17191719
if (!applied)
17201720
return getTypeMatchFailure(locator);
17211721

1722-
if (transaction.hasDiagnostics()) {
1722+
if (transaction.hasErrors()) {
17231723
if (recordFix(
17241724
IgnoreInvalidFunctionBuilderBody::duringConstraintGeneration(
17251725
*this, getConstraintLocator(fn.getBody()))))
@@ -1814,7 +1814,7 @@ class PreCheckFunctionBuilderApplication : public ASTWalker {
18141814

18151815
HasError |= ConstraintSystem::preCheckExpression(
18161816
E, DC, /*replaceInvalidRefsWithErrors=*/false);
1817-
HasError |= transaction.hasDiagnostics();
1817+
HasError |= transaction.hasErrors();
18181818

18191819
if (SuppressDiagnostics)
18201820
transaction.abort();

lib/Sema/CSFix.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1588,7 +1588,7 @@ bool IgnoreInvalidFunctionBuilderBody::diagnose(const Solution &solution,
15881588
}
15891589

15901590
bool diagnosed() const {
1591-
return Transaction.hasDiagnostics();
1591+
return Transaction.hasErrors();
15921592
}
15931593
};
15941594

0 commit comments

Comments
 (0)