-
Notifications
You must be signed in to change notification settings - Fork 14.6k
[analyzer][NFC] Trivial cleanup in ArrayBoundChecker #126941
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
Conversation
Two small stylistic improvements in code that I wrote ~a year ago: 1. fix a typo in a comment; and 2. simplify the code of `tryDividePair` by swapping the true and the false branches.
@llvm/pr-subscribers-clang @llvm/pr-subscribers-clang-static-analyzer-1 Author: Donát Nagy (NagyDonat) ChangesTwo small stylistic improvements in code that I wrote ~a year ago:
Full diff: https://github.com/llvm/llvm-project/pull/126941.diff 1 Files Affected:
diff --git a/clang/lib/StaticAnalyzer/Checkers/ArrayBoundChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/ArrayBoundChecker.cpp
index 109faacf1726a..f56e9192d1d66 100644
--- a/clang/lib/StaticAnalyzer/Checkers/ArrayBoundChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/ArrayBoundChecker.cpp
@@ -323,7 +323,7 @@ compareValueToThreshold(ProgramStateRef State, NonLoc Value, NonLoc Threshold,
// we want to ensure that assumptions coming from this precondition and
// assumptions coming from regular C/C++ operator calls are represented by
// constraints on the same symbolic expression. A solution that would
- // evaluate these "mathematical" compariosns through a separate pathway would
+ // evaluate these "mathematical" comparisons through a separate pathway would
// be a step backwards in this sense.
const BinaryOperatorKind OpKind = CheckEquality ? BO_EQ : BO_LT;
@@ -394,14 +394,13 @@ static bool tryDividePair(std::optional<int64_t> &Val1,
return false;
const bool Val1HasRemainder = Val1 && *Val1 % Divisor;
const bool Val2HasRemainder = Val2 && *Val2 % Divisor;
- if (!Val1HasRemainder && !Val2HasRemainder) {
- if (Val1)
- *Val1 /= Divisor;
- if (Val2)
- *Val2 /= Divisor;
- return true;
- }
- return false;
+ if (Val1HasRemainder || Val2HasRemainder)
+ return false;
+ if (Val1)
+ *Val1 /= Divisor;
+ if (Val2)
+ *Val2 /= Divisor;
+ return true;
}
static Messages getExceedsMsgs(ASTContext &ACtx, const SubRegion *Region,
|
const bool Val1HasRemainder = Val1 && *Val1 % Divisor; | ||
const bool Val2HasRemainder = Val2 && *Val2 % Divisor; | ||
if (!Val1HasRemainder && !Val2HasRemainder) { | ||
if (Val1) | ||
*Val1 /= Divisor; | ||
if (Val2) | ||
*Val2 /= Divisor; | ||
return true; | ||
} | ||
return false; | ||
if (Val1HasRemainder || Val2HasRemainder) | ||
return false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought about removing these boolean variables (and introducing two separate early return paths for Val1
and Val2
), but their names seem to be useful for documenting this logic.
Two small stylistic improvements in code that I wrote ~a year ago: 1. fix a typo in a comment; and 2. simplify the code of `tryDividePair` by swapping the true and the false branches.
Two small stylistic improvements in code that I wrote ~a year ago:
tryDividePair
by swapping the true and the false branches.