================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to