This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGb5b9489b2415: Only consider built-in compound assignment operators for -Wunused-but-set-* (authored by sberg).
Changed prior to commit: https://reviews.llvm.org/D103949?vs=350824&id=351778#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D103949/new/ https://reviews.llvm.org/D103949 Files: clang/lib/Sema/SemaExprCXX.cpp clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp Index: clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp =================================================================== --- clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp +++ clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp @@ -6,6 +6,7 @@ struct __attribute__((warn_unused)) SWarnUnused { int j; + void operator +=(int); }; int f0() { @@ -48,3 +49,16 @@ char a[x]; char b[y]; } + +void f3(int n) { + // Don't warn for overloaded compound assignment operators. + SWarnUnused swu; + swu += n; +} + +template<typename T> void f4(T n) { + // Don't warn for (potentially) overloaded compound assignment operators in + // template code. + SWarnUnused swu; + swu += n; +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -7808,11 +7808,15 @@ Expr *E, llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) { DeclRefExpr *LHS = nullptr; if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { - if (!BO->isAssignmentOp()) + if (BO->getLHS()->getType()->isDependentType() || + BO->getRHS()->getType()->isDependentType()) { + if (BO->getOpcode() != BO_Assign) + return; + } else if (!BO->isAssignmentOp()) return; LHS = dyn_cast<DeclRefExpr>(BO->getLHS()); } else if (CXXOperatorCallExpr *COCE = dyn_cast<CXXOperatorCallExpr>(E)) { - if (!COCE->isAssignmentOp()) + if (COCE->getOperator() != OO_Equal) return; LHS = dyn_cast<DeclRefExpr>(COCE->getArg(0)); }
Index: clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp =================================================================== --- clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp +++ clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp @@ -6,6 +6,7 @@ struct __attribute__((warn_unused)) SWarnUnused { int j; + void operator +=(int); }; int f0() { @@ -48,3 +49,16 @@ char a[x]; char b[y]; } + +void f3(int n) { + // Don't warn for overloaded compound assignment operators. + SWarnUnused swu; + swu += n; +} + +template<typename T> void f4(T n) { + // Don't warn for (potentially) overloaded compound assignment operators in + // template code. + SWarnUnused swu; + swu += n; +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -7808,11 +7808,15 @@ Expr *E, llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) { DeclRefExpr *LHS = nullptr; if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { - if (!BO->isAssignmentOp()) + if (BO->getLHS()->getType()->isDependentType() || + BO->getRHS()->getType()->isDependentType()) { + if (BO->getOpcode() != BO_Assign) + return; + } else if (!BO->isAssignmentOp()) return; LHS = dyn_cast<DeclRefExpr>(BO->getLHS()); } else if (CXXOperatorCallExpr *COCE = dyn_cast<CXXOperatorCallExpr>(E)) { - if (!COCE->isAssignmentOp()) + if (COCE->getOperator() != OO_Equal) return; LHS = dyn_cast<DeclRefExpr>(COCE->getArg(0)); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits