[PATCH] D113480: [analyzer] Fix region cast between the same types with different qualifiers.

Bal√°zs Benics via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 10 09:26:47 PST 2021

steakhal added a comment.

Very solid patch!

Comment at: clang/lib/StaticAnalyzer/Core/Store.cpp:98
   QualType PointeeTy = CastToTy->getPointeeType();
   QualType CanonPointeeTy = Ctx.getCanonicalType(PointeeTy);
You only use `CanonPointeeTy.getLocalUnqualifiedType()` all the places. Spell it once and reuse it everywhere.

Comment at: clang/lib/StaticAnalyzer/Core/Store.cpp:104
-  // Handle casts from compatible types.
-  if (R->isBoundable())
+  const auto IsSameRegionType = [&Ctx, CanonPointeeTy](const MemRegion *R) {
     if (const auto *TR = dyn_cast<TypedValueRegion>(R)) {
For me at least, a name like `IsSameRegionType()` would imply a function with two parameters.

Comment at: clang/lib/StaticAnalyzer/Core/Store.cpp:115
+  // Handle casts from compatible types.
+  if (R->isBoundable() && IsSameRegionType(R))
+    return R;
BTW do you know what `isBoundable()` is? I'm just curious.

Comment at: clang/lib/StaticAnalyzer/Core/Store.cpp:184
+        // Edge case: we are at 0 bytes off the beginning of baseR. We
         // check to see if type we are casting to is the same as the base
+        // region. If so, just return the base region.

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list