<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/99764>99764</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy diagnoses "dereference of undefined pointer value" (`clang-analyzer-core.NullDereference`) from an integer multiplication
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bernardosulzbach
      </td>
    </tr>
</table>

<pre>
    # Output
```
/home/bernardo/code/clang-tidy-bug-reports/NullDereference/NullDereference.cpp:8:82: warning: Dereference of undefined pointer value [clang-analyzer-core.NullDereference]
    8 |         auto const at = [&](int const row) { std::cout << static_cast<float>(2 * featheringIndex + row) << '\n'; };
      | ^
/home/bernardo/code/clang-tidy-bug-reports/NullDereference/NullDereference.cpp:9:9: note: Calling 'operator()'
    9 |         at(0);
      | ^~~~~
/home/bernardo/code/clang-tidy-bug-reports/NullDereference/NullDereference.cpp:8:82: note: Dereference of undefined pointer value
    8 |         auto const at = [&](int const row) { std::cout << static_cast<float>(2 * featheringIndex + row) << '\n'; };
      | ^~~~~~~~~~~~~~~
```
Maybe it needs `std::views::enumerate` to reproduce?

# Version
g++ (SUSE Linux) 13.3.0
clang-tidy version 18.1.8

# Inputs
I tried to minify the real source code, but you can probably minify it further and still reproduce.

## C++
```cpp
#include <array>
#include <iostream>
#include <ranges>

int main() {
    std::array<float, 4> constexpr FeatheringLevels = {0.5f, 1.0f, 2.0f};
    for (auto const [featheringIndex, featheringLevel] : std::views::enumerate(FeatheringLevels)) {
        auto const at = [&](int const row) { std::cout << static_cast<float>(2 * featheringIndex + row) << '\n'; };
 at(0);
    }
}
```

## CMake
```cmake
cmake_minimum_required(VERSION 3.24.0 FATAL_ERROR)

set(CMAKE_COLOR_DIAGNOSTICS ON)

include(CheckCXXCompilerFlag)

project(NullDereference)
set(VERSION_MAJOR 0)
set(VERSION_MINOR 1)

set(CMAKE_CXX_STANDARD 23)
set(CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)

# Keep the exclusions sorted
set(CLANG_TIDY_CHECKS_LIST
    boost-*
    bugprone-*
 -bugprone-easily-swappable-parameters
    -bugprone-exception-escape
 -bugprone-unchecked-optional-access
    clang-analyzer-*
 concurrency-*
    cppcoreguidelines-*
 -cppcoreguidelines-avoid-magic-numbers
 -cppcoreguidelines-init-variables
 -cppcoreguidelines-pro-bounds-constant-array-index
 -cppcoreguidelines-pro-type-reinterpret-cast
 -cppcoreguidelines-pro-type-union-access
    misc-*
 -misc-no-recursion
    modernize-*
    -modernize-use-nullptr
 -modernize-use-std-numbers
    -modernize-use-trailing-return-type
 performance-*
    -performance-no-int-to-ptr
    portability-*
 readability-*
    -readability-function-cognitive-complexity
 -readability-identifier-length
    -readability-magic-numbers
 -readability-uppercase-literal-suffix)
list(JOIN CLANG_TIDY_CHECKS_LIST "," CLANG_TIDY_CHECKS_STRING)
set(CMAKE_CXX_CLANG_TIDY clang-tidy "-checks=${CLANG_TIDY_CHECKS_STRING}")

add_executable(NullDereference NullDereference.cpp)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV09z4joS_zTiojIFMgZz4AAGZnmTwFvIe5U9UbLcNtonS179yYQ55LNvyRAwDpmd01Tto0JkpO7Wr7t_3ZKpMbyQABMUzVA071BnD0pPUtCS6kwZJ76nlB06qcqOE0RCvHG2chb15qg3RcPe-e_0kywPqgRElu_qiCyZyvwME1QWgeXZMUhdEWiolLYGkeXaCTEHDTlokAw-znRZVaFwGvsvQeEUf6Nacln4x4YYVjl2MoOcS8hwpbi0oPELFQ4wiman_amk4vgddMCUhm5762h-8gNjjGOMRgl-_1BnFWZKGoupxSice5OIDL0Kibm050WtviEyxmg0w8ZmKJyicMqU8yoJChNsLLWc7Rk1FoVJLhS1KFwgEhOMyBTnQO0BNJfFSmbwihGZXUyeDCAyQlEi_RDOMBrNUTi7gsY1aBQtfkE-xucvlsqCHxMqBJeFh6gq0NQqjUiMyNiDvUAc38bVIhL3vMxdN97e3t5-KbXeffk5Xv1d2PJ287lb2o_0mALmFkuAzGA07F0Qv3D4Zk6PIF3pMw9o2MNWYQ2VVpljgMLl2ew5myH-E7ThSp4mCkRmHj4i8e6P3QI_cOlevSP9sBt2zxiuecYvJ2Xcj7v9btw2vZKVs-b0e4Wt5pB5NCWXPD9iewCsgQpslNMM8IlFCU6dxUflMKMSV1qlNBXHdx1uce60jzamMsPGciGu3nVbADyG5ORRK5ieb-9SXDLhMvC5olrTo0_tnTWujNVAy0-WNZUFmOti_d9TrKRcnurPE-ya9UvezpueeUUSPEDh4sRMeK00Xl7o9QAvIMyJyKNZrxvlXrzf7dUj8WOLWrnSPpeNQkDRrMVXr5vf7oGiOfbl92NukbgNrW4yLT__Xwrxfgv0IqeEXh5aZ-0N2R7pX9CmWnmZqx_3nsqlK_ca_uO4hgyR-M_FdrfarHHYJYNuDy-nT9OH_WK73Ww9nsY-BjzK5HH6dbFPNg-b7X6-mn5Zb3ZPq2SHN-uW-JmfXuUA7K_k-TlRZcUF6KWgRUu40urfwLz9D_163Nz9DHb_OP1ts8W9z1ZX680W93-E__l5v3uarufT7Rz7-N3Yaa7ut4t__rHaLuZND9umFs9Pi7Xfeoc3y-VdscXz75vt0z7ZPP6-evABfHycrue7Dyh9Kr8CVHWLglcmnG9yBhulLWQ3dh-m6y_7p9X8X_vkH4vk627_sNo9XemTKmVsgMi0MeWKSisJjdngMgfUcHEMzDdaVTQVEFRU0xIsaHO10BB_ZVBZrmQAhtEKPthzkvnEQxaoWo6KgDIGpmGtdSG7omJKMqc9A463HrCq8te2wvEMBJdgmq58XKQvimdBSQvOAunK9OrLHWEuuQ1eqObe-x_IVVoFqXIyM0HdOqi0Qd1IA173tB8q2mMFgYb6BlFpsEHdUP63ipM-1O0AltywZgTq31IFGphrHK21qMpAS_4dbgMaXOedgUA6ISqrL_ZuFo3NWlH8aMBqyv0VMNBgnZY1-LNwBTpXuqSStTE0V6QKuLSBVcEVB8bY3-doygW3TUZooNnHWW-yuZI7yWqmMlVIbvkLBEyVlYBXbo_vrjYVeAbS8pyDDgTIwh4-MXyXWE0BV1WgGTUQCG5BUxEYl-f89VL0ghtfy79tVmt8v6AxIgSRBBFyR2D3tF2tv3zal64KuHFxQoQEdWkaFM4RGaDR7FPLo3m9_U2Lolm2h1dgzvpC-diz8b0b9sXE-9nUySZhNg7HtAOT_oj0B_GIDMLOYTLOMzoesiyPWR6laTyKeuOYxv2cDUYwirIOn5AeGfRGpNcfRINe2B0N-zEMh9E4jUI2jgZo0IOSctEV4qXsKl10uDEOJuPxaDjoCJqCMPW7LiHXsHg_o3lHT7yS72IGDXo-PeZqxnIrYNIIZcZpIZUB44Oa_dwLA_EXhtifzj_xOjr0ZxzOtSoxldibKUDj0gnLK8EZ9bTuOC0mB2ur-pZElogsC24PLu0yVSKy9PDPQ3A5aJd1SPwb0ikqLxPy3wAAAP__ORrkpA">