[PATCH] D16310: new clang-tidy checker misc-long-cast

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 21 07:28:03 PST 2016


alexfh added inline comments.

================
Comment at: clang-tidy/misc/LongCastCheck.cpp:21
@@ +20,3 @@
+  Finder->addMatcher(
+      returnStmt(
+          has(cStyleCastExpr(has(binaryOperator(anyOf(hasOperatorName("+"),
----------------
danielmarjamaki wrote:
> alexfh wrote:
> > Any reason to limit this to returnStmt, varDecl and assignment? This pattern can appear in any expression and lead to equally incorrect results.
> Yes. There could be some extra pattern we want to look for later. But I don't want to warn in general. Example:
> 
>     int A,B,C;
>     long ABC = (long)(A * B) + C;
> 
> That code makes perfect sense if the calculation A*B won't overflow and you want that the addition is done with long precision.
> 
Then you don't need to repeat the inner matcher. Assign it to an auto variable and then use it in the other matchers:

  auto CastExpr = cStyleCastExpr(...);
  Finder->addMatcher(returnStmt(has(CastExpr)));
  Finder->addMatcher(varDecl(has(CastExpr)));
  ...


================
Comment at: clang-tidy/misc/LongCastCheck.cpp:55
@@ +54,3 @@
+      llvm::APSInt Val;
+      if (Bop->getRHS()->EvaluateAsInt(Val, C)) {
+        return Val.getActiveBits();
----------------
nit: Braces are not needed around one-line `if` bodies.

================
Comment at: clang-tidy/misc/LongCastCheck.cpp:61
@@ +60,3 @@
+      llvm::APSInt Bits;
+      if (Bop->getRHS()->EvaluateAsInt(Bits, C))
+        // We don't handle negative values and large values well. It is assumed
----------------
Please insert braces around the `if` body here: it's hard to see its scope otherwise.


Repository:
  rL LLVM

http://reviews.llvm.org/D16310





More information about the cfe-commits mailing list