diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -7927,7 +7927,7 @@ BO->getRHS()->getType()->isDependentType()) { if (BO->getOpcode() != BO_Assign) return; - } else if (!BO->isAssignmentOp()) + } else if (!BO->isAssignmentOp() || BO->isCompoundAssignmentOp()) return; LHS = dyn_cast(BO->getLHS()); } else if (CXXOperatorCallExpr *COCE = dyn_cast(E)) { diff --git a/clang/test/Sema/warn-unused-but-set-variables.c b/clang/test/Sema/warn-unused-but-set-variables.c --- a/clang/test/Sema/warn-unused-but-set-variables.c +++ b/clang/test/Sema/warn-unused-but-set-variables.c @@ -59,3 +59,10 @@ __attribute__((__cleanup__(for_cleanup))) int x; x = 5; } + +void f4() { + int j = 0; + for (int i = 0; i < 1000; i++) + j += 1; + return; +}