================ @@ -172,27 +179,33 @@ bool DataflowAnalysisContext::equivalentFormulas(const Formula &Val1, } void DataflowAnalysisContext::addTransitiveFlowConditionConstraints( - Atom Token, llvm::SetVector<const Formula *> &Constraints, - llvm::DenseSet<Atom> &VisitedTokens) { - auto Res = VisitedTokens.insert(Token); - if (!Res.second) - return; - - auto ConstraintsIt = FlowConditionConstraints.find(Token); - if (ConstraintsIt == FlowConditionConstraints.end()) { - Constraints.insert(&arena().makeAtomRef(Token)); - } else { - // Bind flow condition token via `iff` to its set of constraints: - // FC <=> (C1 ^ C2 ^ ...), where Ci are constraints - Constraints.insert(&arena().makeEquals(arena().makeAtomRef(Token), - *ConstraintsIt->second)); - } + Atom Token, llvm::SetVector<const Formula *> &Constraints) { + llvm::DenseSet<Atom> AddedTokens; + std::vector<Atom> Remaining = {Token}; + + if (GlobalConstraints) + Constraints.insert(GlobalConstraints); + // Define all the flow conditions that might be referenced in constraints. + while (!Remaining.empty()) { + auto Token = Remaining.back(); + Remaining.pop_back(); + if (!AddedTokens.insert(Token).second) + continue; + + auto ConstraintsIt = FlowConditionConstraints.find(Token); + if (ConstraintsIt == FlowConditionConstraints.end()) { + Constraints.insert(&arena().makeAtomRef(Token)); + } else { + // Bind flow condition token via `iff` to its set of constraints: + // FC <=> (C1 ^ C2 ^ ...), where Ci are constraints + Constraints.insert(&arena().makeEquals(arena().makeAtomRef(Token), + *ConstraintsIt->second)); + } ---------------- sam-mccall wrote:
braces are required here because the `else` has a comment and the `then` should be consistent with it https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements https://github.com/llvm/llvm-project/pull/65949 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits