================
@@ -400,12 +401,58 @@ void FactsGenerator::VisitBinaryOperator(const
BinaryOperator *BO) {
// TODO: Handle assignments involving dereference like `*p = q`.
}
+void FactsGenerator::handleTernaryOperator(const ConditionalOperator *CO) {
+ const Expr *TrueExpr = CO->getTrueExpr();
+ const Expr *FalseExpr = CO->getFalseExpr();
+
+ const auto Preds = CurrentBlock->preds();
+ auto PredHasStmt = [](const CFGBlock::AdjacentBlock &Pred, const Stmt *S) {
+ return llvm::any_of(*Pred, [S](const CFGElement &Elt) {
+ if (auto CS = Elt.getAs<CFGStmt>()) {
+ return CS->getStmt() == S;
+ }
+ return false;
+ });
+ };
+
+ bool TBHasEdge = true;
+ bool FBHasEdge = true;
+
+ switch (CurrentBlock->pred_size()) {
+ case 0:
+ return;
+ case 1:
+ TBHasEdge = PredHasStmt(*Preds.begin(), TrueExpr->IgnoreParenImpCasts());
----------------
Xazax-hun wrote:
Instead of looking at the statements, would it be possible to get the
corresponding Cfg nodes and compare the preds to the CFG nodes correspond to
the true and false expression?
https://github.com/llvm/llvm-project/pull/190345
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits