[clang] [analyzer][NFC] Document and centralize the CallEvent argument/parameter index mapping (PR #221252)

Benedek Kaibas via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 9 06:25:11 PDT 2026


================
@@ -350,8 +350,13 @@ SVal ExprEngine::computeObjectUnderConstruction(
         // Operator arguments do not correspond to operator parameters
         // because this-argument is implemented as a normal argument in
         // operator call expressions but not in operator declarations.
-        const TypedValueRegion *TVR = Caller->getParameterLocation(
-            *Caller->getAdjustedParameterIndex(Idx), NumVisitedCaller);
+        std::optional<unsigned> DeclParamIdx =
+            Caller->getAdjustedParameterIndex(Idx);
+        if (!DeclParamIdx)
+          return std::nullopt;
+
+        const TypedValueRegion *TVR =
+            Caller->getParameterLocation(*DeclParamIdx, NumVisitedCaller);
----------------
benedekaibas wrote:

Applied changes here: [25f5339](https://github.com/llvm/llvm-project/pull/221252/commits/25f5339a6ef0e59ac4e1e478215ac07eadcd46a4)

I have confirmed that `unsigned` implicitly converts to `std::optional<unsigned>`. Accepting `std::optional<unsigned>` as a parameter can be "dangerous" (if a negative signed value reaches it since it would silently wrap to a huge unsigned value), but cases where it can behave incorrectly does not apply for parameter index lookup cases.

https://github.com/llvm/llvm-project/pull/221252


More information about the cfe-commits mailing list