[PATCH] D128068: [analyzer] Do not emit redundant SymbolCasts

Balázs Benics via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Jun 18 11:15:52 PDT 2022


steakhal accepted this revision.
steakhal added a comment.
This revision is now accepted and ready to land.

> We can't just do that check in `evalCast` because there are many additonal logic before we'd end up in `makeNonLoc`.

I'm not exactly up to date. Could you please extend the summary with an example to underpin this statement prior to committing?



================
Comment at: clang/lib/StaticAnalyzer/Core/SValBuilder.cpp:116-117
   assert(!Loc::isLocType(toTy));
+  if (fromTy == toTy)
+    return operand;
   return nonloc::SymbolVal(SymMgr.getCastSymbol(operand, fromTy, toTy));
----------------
Should we account for qualified types?
If not, could we assert that?


================
Comment at: clang/test/Analysis/symbolcast-floatingpoint.cpp:12-24
+void test_no_redundant_floating_point_cast(int n) {
+
+  double D = n / 30;
+  clang_analyzer_dump(D); // expected-warning{{(double) ((reg_$0<int n>) / 30)}}
+
+  // There are two cast operations evaluated above:
+  // 1. (n / 30) is cast to a double during the store of `D`.
----------------



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D128068/new/

https://reviews.llvm.org/D128068



More information about the cfe-commits mailing list