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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] unexpected `readability-math-missing-parentheses` warnings for assignment
        </td>
    </tr>

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

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

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

<pre>
    see https://godbolt.org/z/7nK7fG4Gs, reduced from https://github.com/zufuliu/notepad2/blob/main/scintilla/src/Document.cxx#L691
```c++
// clang-tidy -checks=readability-math-missing-parentheses test.cpp --
int LevelNumberPart(int level);
bool LevelIsHeader(int level);
bool LevelIsWhitespace(int level);
int GetFoldLevel(int line);
int GetFoldParent(int line);
int GetLastChild(int line);

int GetHighlightDelimiters(int line) {
    const int level = GetFoldLevel(line);
    int lookLine = line;
    int lookLineLevel = level;
    int lookLineLevelNum = 0;

    const int beginFoldBlock = LevelIsHeader(lookLineLevel) ? lookLine : GetFoldParent(lookLine);
 const int endFoldBlock = GetLastChild(beginFoldBlock);
    int firstChangeableLineBefore = -1;
    for (lookLine = line - 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
        lookLine >= beginFoldBlock;
 lookLineLevel = GetFoldLevel(--lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel)) {
        if (LevelIsWhitespace(lookLineLevel) || (lookLineLevelNum > LevelNumberPart(level))) {
            firstChangeableLineBefore = lookLine;
            break;
        }
    }

    int firstChangeableLineAfter = -1;
    for (lookLine = line + 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
        lookLine <= endFoldBlock;
 lookLineLevel = GetFoldLevel(++lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel)) {
        if (LevelIsHeader(lookLineLevel) && (lookLineLevelNum < LevelNumberPart(GetFoldLevel(lookLine + 1)))) {
 firstChangeableLineAfter = lookLine;
            break;
 }
    }
    return firstChangeableLineBefore + firstChangeableLineAfter;
}
```

```
[<source>:18:21: warning: '-' has higher precedence than '='; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]](javascript:;)
 18 |     for (lookLine = line - 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
      | ^~~~~~~~~
      |                     (       )
[<source>:28:21: warning: '+' has higher precedence than '='; add parentheses to explicitly specify the order of operations [readability-math-missing-parentheses]](javascript:;)
   28 |     for (lookLine = line + 1, lookLineLevel = GetFoldLevel(lookLine), lookLineLevelNum = LevelNumberPart(lookLineLevel);
      | ^~~~~~~~~
      |                     (       )
2 warnings generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV11vozgX_jXOjUUEJoRwkYt8lM6rNxrN3V4b-wCeGhvZptvOxf72laFNAvmYVhrtzlqoBfs5Pl-PT3yotaJSAGuUbFGyn9HO1dqsf3RlJ0U3KzR_XVsAXDvXWhRvEMkRySvNCy3dXJsKkfwHInmq_p-Wj4tHi8gOG-AdA45Lo5uppHB1V8yZbrzgoAWRXGkHLeUEkbyQukAkb6hQiOSWCeWElNS_G4ZIvtesa0C5OXt5QSQ-LLMIhXsUbtAyHB6GyNY_w2yvFjNJVRU4wV9xwGpgTxbFewOU00JI4V6Dhro6aIS1QlVBSw0oV4MFix1YN2dti4Ng2FEohw_wDPJr1xRgvlHjEFn5WelnEclQ_Ka80FoO2P_ZL0A5mI8g_6iFA9tSBrfQfvIRXK4lPwxrA04ouAH71nt0H3eg1u1qIfkN2Aj8RVS1FFXt9iBFIxwYOxbDKH2TwxhjppV1-OgMRvF-6sFUnRfrBbR-OggFvUwPuoU4HLceInYX97Vremg48W9sbQGVUN7KrdTsqReY5nO0a-94nJ8bvbnIwfviyNuTTlB8rHGSm7FN10JWCuPhVFVACwle1xZKbYYYBtFIoNQGnxl1DDMOcORP82V0p4k7c2eKf4_y5YGZhm1kkx9nBj34LSZuH-E_tS8IfpGFU1L34S598K6d3EtepDuU7vB0aTDg4ZoBJ8VXdffZu5vqo-PT4PpRGKBPFyso3Z8mjh8_5demdGA-RS9Etr8NwXZ-i_Nz9wl6Db82_xTF7pQdskRkeYNeuyvKb0T5PTHZNebdzfxn2HadZv7DgOuMukdssr1px6mYH5n7fi04J_J0MtmieGd1Zxj01WYTrVC8IZGv3n9So4Sq_CsiaYBIimtqcS2qGgxuDTDgoBhgV1PlISje93-3mHKOR3cJjeGllYIJJ1-xbYGJ8hW7GrA2HAzWJdYtGOqEVhajZPuRGwpK9v4hq-_0mVpmROv8dSve-uQNUY1Wvvjg37fa93UxefjrbUyXrg1EVse37FYaya009of2v5dIjMkHUvkvV9Zfk0zynjGLK1A-lsDnk9M74-uYZ3FGZ7CO0ijJFlGYklm9pnGWJOmKhTFlcRmmBVkUCSTxsszCNOPxTKxJSBZhEqVRGKUJmRcLvlhFnLHFKkrTJUGLEBoq5FzK58Y3OjNhbQfrjCTRciZpAdL2TRMhp94CEeKbKLP2QkHRVRYtQimss6dtnHCyb7fOxJI97hS8tMAccIyW4YfosgxPIfJcGHo53xvNOiPXdxovb8zbv6A1-jswh0jeO2gRyXsf_w4AAP__uUNTdA">