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

    <tr>
        <th>Summary</th>
        <td>
            slow static analyzer performance with if-else chains
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:static analyzer,
            performance
      </td>
    </tr>

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

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

<pre>
    ```cpp
#include <string>

std::string replaceEscapeSequences(const std::string &source)
{
    std::string result;
    for (std::size_t i = 0; i < source.size(); ++i) {
        if (source[i] != '\\' || i + 1 >= source.size()) {
            result += source[i];
        }
 else {
            ++i;
            if (source[i] == 't') {
 result += '\t';
            } else if (source[i] == 'x')
 {
                std::string value = "0";
                if (i + 1 < source.size() && std::isxdigit(source[i+1])) {
 value += source[i++ + 1];
                }
                if (i + 1 < source.size() && std::isxdigit(source[i+1])) {
                    value += source[i++ + 1];
                }
                result += static_cast<char>(std::stoi(value, nullptr, 16));
            }
 }
    }
    return result;
}
```

```
$ time clang-tidy-20 -checks='-*,clang-analyzer-*' utils.cpp
1 warning generated.
Suppressed 1 warnings (1 with check filters).

real 0m4.272s
user    0m3.984s
sys     0m0.266s
```

This has been reduced from https://github.com/danmar/cppcheck/blob/main/lib/utils.cpp. The total time of the whole file is about 10 seconds and the code above accounts for about half of that.

Any further reduction cuts the analysis time by a third or in half.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Vs2SozgMfhrlogoFIglw4NBJJi8wc58yRgTvOpi1Tfdknn7LOJO_yfRt10V1gy3r-z5JliOcU8eBuYb1Ftb7hZh8b2zdKcsf4p0XjWnPNWzS-MhxhHQP6RtQrgapp5YR8p3zVg1HyL9cFue_zreQv0H-FlfR8qiF5C9OipG_8j8TD5IdUCnN4Dw-mwNtnJmsZKDq4rbYxhdE_M3cspu0h_zOpDMWgcqbpfrJ3z0qhHyPKeTb-XWHESYJy0BlgMu3CLQF2iqgCh9ww1Dd7DeyW28VrPcIlAW3QAWsd-GhAqHYQbELKLTFDEN88v0LuFcYYURNM5Xrvgveg9AwoNhfJlg7fu3vl6bnvX_UlO8vmnzQ9UDzkVuUPVu9cg7FPtL6HOVHRLnsfynhVerfhZ4Yow9Kgeglh5vIWz5e5D7UHdDmBqLcj1YdlX_kTdssZOE5eRcqvyVsDnyEfZW835P4fxN_Mf4rLU9V7YVX8rsUzkO-k72w4Zjcn1pvFFA5swHa4TBpPXobXrNN1PGnmrsW0h2Thw_LfrLDc--4mlzb3n1be56kFXp1YpRaDMelV-15SSkuZc_ybxdqm4ol0BvQLlqIQejzT7ZxssDJK-2Sa2PN8EPYIZT1kQe2wnObxJWv0zhado5bvBq5UBYZfijf44yIndKerQOqknvWloXG9LRKqCAXpybHNgQhPeVJVa4us-7sMM6mCW027pNIfOuVw144bJhDENtJcoudNSfsvR9dyB8dgA5H5fupSaQ5AR1aMZyEBTrIcZwpAx0abRqgw0moAeigVfi4xiXBbz2jN17oGGnToe8ZP3qjOehlVA5FYyaPWYqOpRlah2JoZzNpWg6r74xCSjMN3s03Q9zQC91Fh8I_BOxtOGM3Wd-zjdK8MgPKybvZ65xFp1xk1JxRoO-VbdFYVMPsNlm0dd5WeSUWXGcFVVRSWZSLvq6yVcZt2ZUb6pomLZqKqiYX2bqQciUkL1RNKa2yNCsppSwrk2rVtJR361WaSVkSwyrlk1A60fr9lBh7XCjnJq6zjKoiXWjRsHbzlU40l918kMJJw1_1F_ok7YBoZNsZexJDuGop_AawdXC7bKajg1WqlfPuBuSV11w7bT7wySPeeYolqbrl3PZlL9TgFpPV9SeVESAu_5ajNX-x9ECHWZgDOly0vdf0bwAAAP__SVtriQ">