Skip to content

[clang-tidy] unexpected readability-math-missing-parentheses warnings for assignment #92516

Closed
@zufuliu

Description

@zufuliu

see https://godbolt.org/z/7nK7fG4Gs, reduced from https://github.com/zufuliu/notepad2/blob/main/scintilla/src/Document.cxx#L691

// 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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions