Author: Dávid Bolvanský Date: 2022-03-24T10:34:44+01:00 New Revision: 2af845a6519c9cde5c8f58db5554f8b1084ce1ed
URL: https://github.com/llvm/llvm-project/commit/2af845a6519c9cde5c8f58db5554f8b1084ce1ed DIFF: https://github.com/llvm/llvm-project/commit/2af845a6519c9cde5c8f58db5554f8b1084ce1ed.diff LOG: Relands "[Clang] -Wunused-but-set-variable warning - handle also pre/post unary operators" Added: Modified: clang/lib/Sema/SemaExprCXX.cpp clang/test/Sema/warn-unused-but-set-parameters.c clang/test/Sema/warn-unused-but-set-variables.c clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 8873731cd3d3e..f360dc6e1a236 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -7921,6 +7921,7 @@ static void MaybeDecrementCount( Expr *E, llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) { DeclRefExpr *LHS = nullptr; bool IsCompoundAssign = false; + bool isIncrementDecrementUnaryOp = false; if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { if (BO->getLHS()->getType()->isDependentType() || BO->getRHS()->getType()->isDependentType()) { @@ -7935,6 +7936,11 @@ static void MaybeDecrementCount( if (COCE->getOperator() != OO_Equal) return; LHS = dyn_cast<DeclRefExpr>(COCE->getArg(0)); + } else if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) { + if (!UO->isIncrementDecrementOp()) + return; + isIncrementDecrementUnaryOp = true; + LHS = dyn_cast<DeclRefExpr>(UO->getSubExpr()); } if (!LHS) return; @@ -7942,8 +7948,10 @@ static void MaybeDecrementCount( if (!VD) return; // Don't decrement RefsMinusAssignments if volatile variable with compound - // assignment (+=, ...) to avoid potential unused-but-set-variable warning. - if (IsCompoundAssign && VD->getType().isVolatileQualified()) + // assignment (+=, ...) or increment/decrement unary operator to avoid + // potential unused-but-set-variable warning. + if ((IsCompoundAssign || isIncrementDecrementUnaryOp) && + VD->getType().isVolatileQualified()) return; auto iter = RefsMinusAssignments.find(VD); if (iter == RefsMinusAssignments.end()) diff --git a/clang/test/Sema/warn-unused-but-set-parameters.c b/clang/test/Sema/warn-unused-but-set-parameters.c index 4f000617cfcc4..f1563ab50c1fb 100644 --- a/clang/test/Sema/warn-unused-but-set-parameters.c +++ b/clang/test/Sema/warn-unused-but-set-parameters.c @@ -25,10 +25,10 @@ void f3(struct S s) { // expected-warning{{parameter 's' set but not used}} s = t; } -void f4(int j) { //TODO: warn +void f4(int j) { // expected-warning{{parameter 'j' set but not used}} j++; } -void f5(int k) { //TODO: warn +void f5(int k) { // expected-warning{{parameter 'k' set but not used}} --k; } diff --git a/clang/test/Sema/warn-unused-but-set-variables.c b/clang/test/Sema/warn-unused-but-set-variables.c index 6e5b7d671711b..a390944815a9a 100644 --- a/clang/test/Sema/warn-unused-but-set-variables.c +++ b/clang/test/Sema/warn-unused-but-set-variables.c @@ -73,3 +73,23 @@ void f3(void) { __attribute__((__cleanup__(for_cleanup))) int x; x = 5; } + +void f4(void) { + int x1 = 0; // expected-warning{{variable 'x1' set but not used}} + x1++; + int x2 = 0; // expected-warning{{variable 'x2' set but not used}} + x2--; + int x3 = 0; // expected-warning{{variable 'x3' set but not used}} + ++x3; + int x4 = 0; // expected-warning{{variable 'x4' set but not used}} + --x4; + + static int counter = 0; // expected-warning{{variable 'counter' set but not used}} + counter += 1; + + volatile int v1 = 0; + ++v1; + typedef volatile int volint; + volint v2 = 0; + v2++; +} diff --git a/clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp b/clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp index 400e9d7681b31..418baa78aa964 100644 --- a/clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp +++ b/clang/test/SemaCXX/warn-unused-but-set-variables-cpp.cpp @@ -7,6 +7,7 @@ struct S { struct __attribute__((warn_unused)) SWarnUnused { int j; void operator +=(int); + void operator ++(); }; int f0() { @@ -62,3 +63,9 @@ template<typename T> void f4(T n) { SWarnUnused swu; swu += n; } + +template <typename T> void f5() { + // Don't warn for overloaded pre/post operators in template code. + SWarnUnused swu; + ++swu; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits