-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[clang-tidy] Add check for assignment or comparision operators' operand in readability-math-missing-parentheses
#141345
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@llvm/pr-subscribers-clang-tidy Author: None (flovent) ChangesFixes false negative in #141249. Add check for math binary operators which are operands of assignment or comparision operators. Full diff: https://github.com/llvm/llvm-project/pull/141345.diff 3 Files Affected:
diff --git a/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp b/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
index 64ce94e3fc1db..d867c94242f9b 100644
--- a/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
@@ -16,13 +16,15 @@ using namespace clang::ast_matchers;
namespace clang::tidy::readability {
void MathMissingParenthesesCheck::registerMatchers(MatchFinder *Finder) {
- Finder->addMatcher(binaryOperator(unless(hasParent(binaryOperator())),
- unless(isAssignmentOperator()),
- unless(isComparisonOperator()),
- unless(hasAnyOperatorName("&&", "||")),
- hasDescendant(binaryOperator()))
- .bind("binOp"),
- this);
+ Finder->addMatcher(
+ binaryOperator(
+ unless(hasParent(binaryOperator(unless(isAssignmentOperator()),
+ unless(isComparisonOperator())))),
+ unless(isAssignmentOperator()), unless(isComparisonOperator()),
+ unless(hasAnyOperatorName("&&", "||")),
+ hasDescendant(binaryOperator()))
+ .bind("binOp"),
+ this);
}
static int getPrecedence(const BinaryOperator *BinOp) {
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8032f0d23f494..a7530a236e9ec 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -176,6 +176,11 @@ Changes in existing checks
<clang-tidy/checks/concurrency/mt-unsafe>` check by fixing a false positive
where ``strerror`` was flagged as MT-unsafe.
+- Improved :doc:`readability-math-missing-parentheses
+ <clang-tidy/checks/readability/math-missing-parentheses>` check by fixing
+ false negatives where math expressions are the operand of assignment operators
+ or comparison operators.
+
- Improved :doc:`misc-const-correctness
<clang-tidy/checks/misc/const-correctness>` check by adding the option
`AllowedTypes`, that excludes specified types from const-correctness
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
index 80d2bc304bb5b..5c10ed59178d8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
@@ -157,3 +157,17 @@ namespace PR92516 {
for (j = i + 1, 2; j < 1; ++j) {}
}
}
+
+namespace PR141249 {
+ void AssignAsParentBinOp(int* netChange, int* nums, int k, int i) {
+ //CHECK-MESSAGES: :[[@LINE+1]]:30: warning: '-' has higher precedence than '^'; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]
+ netChange[i] = nums[i] ^ k - nums[i];
+ }
+}
+
+void CompareAsParentBinOp(int b) {
+ //CHECK-MESSAGES: :[[@LINE+1]]:12: warning: '*' has higher precedence than '-'; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]
+ if (b == 1 * 2 - 3) {
+
+ }
+}
|
@llvm/pr-subscribers-clang-tools-extra Author: None (flovent) ChangesFixes false negative in #141249. Add check for math binary operators which are operands of assignment or comparision operators. Full diff: https://github.com/llvm/llvm-project/pull/141345.diff 3 Files Affected:
diff --git a/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp b/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
index 64ce94e3fc1db..d867c94242f9b 100644
--- a/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/MathMissingParenthesesCheck.cpp
@@ -16,13 +16,15 @@ using namespace clang::ast_matchers;
namespace clang::tidy::readability {
void MathMissingParenthesesCheck::registerMatchers(MatchFinder *Finder) {
- Finder->addMatcher(binaryOperator(unless(hasParent(binaryOperator())),
- unless(isAssignmentOperator()),
- unless(isComparisonOperator()),
- unless(hasAnyOperatorName("&&", "||")),
- hasDescendant(binaryOperator()))
- .bind("binOp"),
- this);
+ Finder->addMatcher(
+ binaryOperator(
+ unless(hasParent(binaryOperator(unless(isAssignmentOperator()),
+ unless(isComparisonOperator())))),
+ unless(isAssignmentOperator()), unless(isComparisonOperator()),
+ unless(hasAnyOperatorName("&&", "||")),
+ hasDescendant(binaryOperator()))
+ .bind("binOp"),
+ this);
}
static int getPrecedence(const BinaryOperator *BinOp) {
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8032f0d23f494..a7530a236e9ec 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -176,6 +176,11 @@ Changes in existing checks
<clang-tidy/checks/concurrency/mt-unsafe>` check by fixing a false positive
where ``strerror`` was flagged as MT-unsafe.
+- Improved :doc:`readability-math-missing-parentheses
+ <clang-tidy/checks/readability/math-missing-parentheses>` check by fixing
+ false negatives where math expressions are the operand of assignment operators
+ or comparison operators.
+
- Improved :doc:`misc-const-correctness
<clang-tidy/checks/misc/const-correctness>` check by adding the option
`AllowedTypes`, that excludes specified types from const-correctness
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
index 80d2bc304bb5b..5c10ed59178d8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/math-missing-parentheses.cpp
@@ -157,3 +157,17 @@ namespace PR92516 {
for (j = i + 1, 2; j < 1; ++j) {}
}
}
+
+namespace PR141249 {
+ void AssignAsParentBinOp(int* netChange, int* nums, int k, int i) {
+ //CHECK-MESSAGES: :[[@LINE+1]]:30: warning: '-' has higher precedence than '^'; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]
+ netChange[i] = nums[i] ^ k - nums[i];
+ }
+}
+
+void CompareAsParentBinOp(int b) {
+ //CHECK-MESSAGES: :[[@LINE+1]]:12: warning: '*' has higher precedence than '-'; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]
+ if (b == 1 * 2 - 3) {
+
+ }
+}
|
…nd in `readability-math-missing-parentheses`
855cef0
to
7d4d9e1
Compare
Fixes false negative in #141249.
Add check for math binary operators which are operands of assignment or comparision operators.