Add SAT solver timeout to inference, and correctly report timeouts/errors.
PiperOrigin-RevId: 565385711
Change-Id: I365edc2f5637a488d703f370d12e537acd0ab3ac
diff --git a/nullability/inference/collect_evidence.cc b/nullability/inference/collect_evidence.cc
index d2a6a64..3505d0c 100644
--- a/nullability/inference/collect_evidence.cc
+++ b/nullability/inference/collect_evidence.cc
@@ -296,7 +296,7 @@
if (!ControlFlowContext) return ControlFlowContext.takeError();
DataflowAnalysisContext AnalysisContext(
- std::make_unique<dataflow::WatchedLiteralsSolver>());
+ std::make_unique<dataflow::WatchedLiteralsSolver>(100000));
Environment Environment(AnalysisContext, *Func);
PointerNullabilityAnalysis Analysis(
Decl.getDeclContext()->getParentASTContext());
@@ -312,19 +312,15 @@
}
}
- std::vector<Evidence> AllEvidence;
- llvm::Expected<std::vector<std::optional<
- dataflow::DataflowAnalysisState<PointerNullabilityLattice>>>>
- BlockToOutputStateOrError = dataflow::runDataflowAnalysis(
- *ControlFlowContext, Analysis, Environment,
- [&](const CFGElement &Element,
- const dataflow::DataflowAnalysisState<PointerNullabilityLattice>
- &State) {
- collectEvidenceFromElement(InferrableSlots, Element, State.Env,
- Emit);
- });
-
- return llvm::Error::success();
+ return dataflow::runDataflowAnalysis(
+ *ControlFlowContext, Analysis, Environment,
+ [&](const CFGElement &Element,
+ const dataflow::DataflowAnalysisState<
+ PointerNullabilityLattice> &State) {
+ collectEvidenceFromElement(InferrableSlots, Element, State.Env,
+ Emit);
+ })
+ .takeError();
}
void collectEvidenceFromTargetDeclaration(