[clang] [clang][analyzer] Improved message in uninitialized.Assign at default assignment (PR #208173)
Balázs Benics via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 9 03:08:04 PDT 2026
================
@@ -73,6 +73,20 @@ void UndefinedAssignmentChecker::checkBind(SVal location, SVal val,
}
}
+ if (const auto *MD =
+ dyn_cast<CXXMethodDecl>(C.getStackFrame()->getDecl())) {
+ if ((MD->isCopyAssignmentOperator() ||
+ MD->isMoveAssignmentOperator()) &&
+ MD->isDefaulted() && B->isAssignmentOp()) {
+ OS << "Value assigned to field '"
+ << cast<MemberExpr>(B->getRHS()->IgnoreImpCasts())
+ ->getMemberDecl()
+ ->getName()
+ << "' in " << (!MD->isImplicit() ? "default" : "implicit")
+ << " assignment operator is uninitialized";
----------------
steakhal wrote:
This would only work for `OO_Equal`, but how about combined overloaded operators like `+=`, `-=`, `|=`, etc.
I think something like `CXXOperatorCallExpr::isAssignmentOp(MD->getOverloadedOperator())` might be more generic.
BTW how do you know that RHS is a `MemberExpr`? What if it's not?
https://github.com/llvm/llvm-project/pull/208173
More information about the cfe-commits
mailing list