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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Segmentation fault during check modernize-loop-convert
        </td>
    </tr>

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

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

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

<pre>
    I get a Segmentation fault when analyzing the following code with clang-tidy 17.0.2 with the check `modernize-loop-convert` in about 50% of the runs:

test.cpp:
```c++
template <unsigned int p> void test() {
  unsigned int test[3][3 * p];

  // Initialize to zero
  for (unsigned int i = 0; i < 3 * p; ++i)
    for (unsigned int j = 0; j < 3; ++j)
      test[j][i] = 0;
}
```

by running `clang-tidy test.cpp -checks=modernize-loop-convert`.

In around 50% of the cases, I get the following error:
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy test.cpp -checks=modernize-loop-convert
1.      <eof> parser at end of file
2. ASTMatcher: Processing 'modernize-loop-convert' against:
 ForStmt : </home/gebauer/work/baci/test/test.cpp:6:5, line:7:20>
--- Bound Nodes Begin ---
    conditionBound - { ImplicitCastExpr : </home/gebauer/work/baci/test/test.cpp:6:34> }
    forLoopArray - { ForStmt : </home/gebauer/work/baci/test/test.cpp:6:5, line:7:20> }
 initVar - { VarDecl j : </home/gebauer/work/baci/test/test.cpp:6:10, col:27> }
--- Bound Nodes End ---
  #0 0x00005590c08d407f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x453207f)
 #1 0x00005590c08d1af4 SignalHandler(int) Signals.cpp:0:0
  #2 0x00007f36de74d420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
  #3 0x00005590bf6deb5a clang::ASTContext::getTypeInfo(clang::Type const*) const (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x333cb5a)
 #4 0x00005590bf6f270f clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x335070f)
 #5 0x00005590bf6deca5 clang::ASTContext::getTypeInfo(clang::Type const*) const (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x333cca5)
[...]
#254 0x00005590bf6f270f clang::ASTContext::getTypeInfoImpl(clang::Type const*) const (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x335070f)
#255 0x00005590bf6deca5 clang::ASTContext::getTypeInfo(clang::Type const*) const (/home/gebauer/programs/clang-tidy-17.0.2/usr/local/bin/clang-tidy+0x333cca5)
Segmentation fault (core dumped)
```

For the other 50% of the runs, I get the expected result:
```
1 warning generated.
/home/gebauer/work/baci/test/test.cpp:6:5: warning: use range-based for loop instead [modernize-loop-convert]
    6 |     for (unsigned int j = 0; j < 3; ++j)
      |     ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |         (auto & j : test)
 7 |       test[j][i] = 0;
      |       ~~~~~~~
      | j
```

I'm running this on Ubuntu 20.04.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV8tu67wRfhp6M5BAk7rYCy98idEAf4sDJP23AUWNZCYyKZDUyWXRZy9I2bGdOj3tuaDoCZxYVIZz-b4ZckY4p1qNuCD5iuSbiRj8ztiF2LdYiQHtpDL16-IWWvQg4A7bPWovvDIaGjF0Hp53qEFo0b2-Kd2C3yE0puvMc1hJUyM8K78D2QndJl7VrzAtU5qy8XUQlzuUT0AKujc1Wq3eMOmM6RNp9Fe0nhQUlAZRmcFDTgnLwTRxox20I3xJ6IbQw1-Pzqey70-vCzp-JGGr8DmI7ftOeATC14OOCNSgtIee8Bv4alQNQRNhM8LmQMrDNoAL4SiSrzjJN-ELCFtCHxZ8de4TAGFbwrZwq5VXolNvCN7AG1pzFGiMBcJmF9oVEL4BSvgqPq7haICvYIxFETY_ariu4_Gk43HUcdr9eLEbjtE8jtEokm_eNx-iKTcfMD2PsnoNfOjAekD7RPeREkgi0Y7wzadEp-cabzUIawZdX7IuhUNH2BrGpLxMOLTW2H8lf1x--eNmeXcDbqj2KmRzNbRgsTfWBz523vcxnSJZrfK7oUql2RO27bqvx6-kt-YRpSdsq5wbgidbEDrALbuhxtFFK9wOKiGfvBUSD1HdeSGfoB72p-yk6Yj9F2taK_YgbDuEAgt-hKzZmT0GZ8ZaJGzbj4LB6gniZKwowraDC0KdkaIjbFspfSH3X1ARvZsevCN8jaYJldEL69CC8IC6DoQ0qsNRmKWwvLv_q_Byh4GBEJNE52JCsPITO6wE0QqlnX_HBLbG3vm9h4gBX1-D4dnYpxCgkIqw7Viq27PaLwhf5iFHOqWR8GVJ-JJRwm9GE0mSwCpm1t9MjQ5W2CoNSZKc6kEaXatwzI1ySTgE4Hbfd0oqvxbO37z09kdd5FkA9b2uDlX8hzH90lrxerD6K_E4M6608n8KezD6p7AblF08Nn7I7JQGu9J0wWR5YfIjDTcB6BMJhHEK9IVSSvN8TiWd1RktG4jVyJeEL92rGx--WKV9rK_7UHCEzU5CVjw_GOctij1hRXBGaR-P9XC6_-QSI2xFX7KcM1o2p_OVMD79EMlUNBncqVaL7i9C110wPTs4Nr52BxBp_D1hwg6ayoYXNZZZnTEKDw8WnTcWH6w_BNapirDty6x4KLKkU3p4SVo9jP_o_c6iqFNnUhpdnmYZo2cXAmGcn3lcNUWNVS7Ga3zEdXl3vzba44sf1y36-9ceb3VjCJudCYa3oZ5CdixDfPH518HPOZdVLi7gzy6DaVhJm_8wmFD0_-uAclrSy3zKP7IjRf5_w44U-XswJF-laRqajnHJOMt_K7ZiRL8NXVcmgOCgsRg7G6xPcV_rErfGxg7J-B3aK938RVuHLz1KjzVYdEPnP2vrpvAsbGw8W9Rohcf62Ed-91XJl0el4XFwCFboFpNKOKxjqx3aGAiNC4oaSL76pMHJz-72Aki5hp_Rqx_1kPwG_vGNn2v74jObicEbIKw43PIjGEdD5Zn0N2eDj-o_sf34b1LjNnSJ7zOE3ykHRsPfq0H7ARhNaZZO6gWv53wuJriYFvNyOs9Yxia7RZUJgfMS5wWvZCZmrJnN5s2MSZxLmWE1UQtGGZ_SKZ_SnGYszfl83hRy1jBeZbwoSUZxL1SXhsYhNbadxPZ-UczmZT7pRIWdizMyY-cVwsLMbBdxMqiG1pGMdsp5d1Ljle_idH22Ld9cm6TrwcaZOY7D19NpMthu8f2DSgzmnwEAAP__noLISA">