[clang] [mutation analyzer] support mutation analysis for pointee (PR #118593)
Julian Schmidt via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 21 01:03:25 PST 2025
================
@@ -112,6 +115,57 @@ AST_MATCHER_P(Stmt, canResolveToExpr, const Stmt *, Inner) {
return canExprResolveTo(Exp, Target);
}
+// use class member to store data can reduce stack usage to avoid stack overflow
+// when recursive call.
+class ExprPointeeResolve {
+ const Expr *T;
+
+ bool resolveExpr(const Expr *E) {
+ if (E == nullptr)
+ return false;
+ if (E == T)
+ return true;
+
+ if (const auto *BO = dyn_cast<BinaryOperator>(E)) {
+ if (BO->isAdditiveOp())
+ return (resolveExpr(BO->getLHS()) || resolveExpr(BO->getRHS()));
+ if (BO->isCommaOp())
+ return resolveExpr(BO->getRHS());
+ return false;
+ }
+
+ if (const auto *PE = dyn_cast<ParenExpr>(E))
+ return resolveExpr(PE->getSubExpr());
+
+ if (const auto *ICE = dyn_cast<ImplicitCastExpr>(E)) {
+ const CastKind kind = ICE->getCastKind();
+ if (kind == CK_LValueToRValue || kind == CK_DerivedToBase ||
+ kind == CK_UncheckedDerivedToBase)
----------------
5chmidti wrote:
I think `CK_DerivedToBase` and `CK_UncheckedDerivedToBase` should be added as well, right?
https://github.com/llvm/llvm-project/pull/118593
More information about the cfe-commits
mailing list