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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] readability-non-const-parameter: false positive in templated variable
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          sebwolf-de
      </td>
    </tr>
</table>

<pre>
    I find a false positive with clang-tidy's readability-non-const-parameter, if the access to the function parameter is hidden behind a template. 

To reproduce:
```
#include <iostream>

constexpr size_t n = 20;

struct ForLoopRange {
 static constexpr size_t start{0};
  static constexpr size_t end{n};
 static constexpr size_t step{1};
};

template <typename Range>
inline void fillIfThreshold(double toFill[n],
 const double inQuestion[n],
                            double fillValue) {
  constexpr double threshold = 0.001;
  for (auto index = Range::start; index < Range::end; index += Range::step) {
    if (inQuestion[index] > threshold) {
      toFill[index] = fillValue;
 }
  }
}

int main() {
  double toFill[n];
  double inQuestion[n];
  for (size_t i = 0; i < n; i++) {
    toFill[i] = 0;
    inQuestion[i] = 0.0001 * i;
  }
  const double fillValue = 12.0;
  fillIfThreshold<ForLoopRange>(toFill, inQuestion, fillValue);
 for (size_t i = 0; i < n; i++) {
    std::cout << toFill[i] << std::endl;
  }
}
```
If I run `clang-tidy test.cpp`, I get: 
```
error: pointer parameter 'toFill' can be pointer to const [readability-non-const-parameter,-warnings-as-errors]
inline void fillIfThreshold(double toFill[n],
                                   ^
 const
```
If I replace the for loop above with the version below, clang-tidy won't throw a false positive.
`for (size_t index = 0; index < n; index++)`
I use clang-tidy from the Fedora repositories:
```
> clang-tidy --version
LLVM (http://llvm.org/):
  LLVM version 15.0.7
  Optimized build.
 Default target: x86_64-redhat-linux-gnu
  Host CPU: skylake
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVsuO4joTfhqzKSUyDiGwYMGl0d_S_DoXzZntyIkr4DPGjmyn6Z6nP7IJSYDu6cWgCOzUV7evirK5c_KgEVck35B8N-GtPxq7cliejaoTgZPSiLfVM9RSC-BQc-UQGuOkly8IZ-mPUCmuD4mX4o2wwoFFLngplfRviTY6qYx2Pmm45Sf0aAnbgqzBHxF4VaFz4E3c1a2uvDQaeihIB0cpBGoo8XgJwOOpUdxjCoTuCF1fvr8asNhYI9oKSda9JHPaPZcty6SuVCsQSLaVxnmL_ESyp7GhGCy-Nhac_InfPWgg2Q4YJdlmjHPetpWHvbFfjGn-5vqAQIoOAs5zLyt4MOY8t54UG0qKXW8QPoSjFqTY6Bvwx6axIcVmOgbfrOP3lb3AgH9rUPMTQoy-50FqJTXCi5ECaqnUc_31aNEdjRKELYRpS4XgzV4qRfKNJvmOsG0XXIwKOozUf7XoQkUfcL_4dMrB8zeuWiRsOSJ2lPc1kmtwsU40pXQ6YrY2Fghb8NYbkFrga0R1Ca9Jtr5UJNv00u1YGgowyNjmQRmbu_gg9DZhi5vkoz7Jd0CypyHgB00YaB1p7EZc9ImFynZ6_XJYdHX0cOJSE7a48_RuDbN78WP5HmjtWk9eqI9MRQZ1XAa-wnOX5ZDjNT86sgy3fgdMSimdAmFrkCP4iIeb3uspi8pTlo593Hd1th3_jcMfgS26KMOsGuJh25u-HEz-Dh_Oi0s3Vab1AR407kmKL3skaqHeI2FY3E6-5xqewbYayJwOwxo8Op9WTRNwbAvPcEBPsjW8awOtNTZIGyN1mM3DlCasuNJVQMXDsO5R3nSFIfnm84MhOXOrpT64hLskenSh8X57Ln3-IfnTeIb9gkZsFK_wcmIZC8qYBnhprodheP-C1oWDrERlzoHaEenn0EeFD2PAnB8O1LR3fNdS_eyit8NK99u-vYZ4oXU49l1bc4oB7lEYy0Muwa-xEt2Hp2b2NDaRJF1yF-mXL9_-H8I8et8EC2xP2F6pl1Nq7CHulr1hgIi-kjPNU5oWV9EfjZcn-RMFlK1UouMBdljzVnnw3HbN-bqYf5_PEoviyH2ipG5fk4Nur3b-Z5yH7Z__BKj78ab4D7xLayJWmVhmSz7B1XRezBhdzlgxOa5QFKxklHPOFkVV1OGpF7O8oJTX82IxkStGWUanjE7plLIiFVWxzNmMsel8tpzlNZlRPHGp0isDE-lci6s5nc6zieIlKhcvWoxpPEMUEsbCvcuugk5StgdHZlRJ591gxUuv4g1tdNPKd59etLL1_XVN6v7-JOCFW8lLhZPWqlUooOsreJD-2JZpZU5dObufpLHmX6w8YfsYvCNsH5P7LwAA__8XzBCx">