llvm/llvm-project

[clang] warn on operator in macro expansion whose operand doesn't lie entirely within the same macro expansion

Open

#184.672 geöffnet am 4. März 2026

Auf GitHub ansehen
 (4 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)C++ (10.782 Forks)batch import
clang:diagnosticsgood first issue

Repository-Metriken

Stars
 (26.378 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 1T 2h) (1.000 gemergte PRs in 30 T)

Beschreibung

Testcase:

#define FOO 2+3
// 2+(3*4) == 14, not (2+3)*4 == 20
int n = FOO*4;

Clang doesn't warn on this, but I think it should. In general, I think a good heuristic would be: if the location of an operator is within a macro expansion, and an operand of that operator is not entirely within that same macro expansion, then warn. In this case, the + operator within FOO has an operand that extends to the 4 token, so we should warn.

This seems like something we could quickly and easily check for with our existing source location representation.

Contributor Guide