[clang-tools-extra] [clang-tidy] warn when `true` is used as a preprocessor keyword in C (PR #128265)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 23 18:02:29 PST 2025
isuckatcs wrote:
@PiotrZSL
> What about 'false' ?
In both cases if `false` is a keyword or an undefined macro, it evaluates to `false`, so I don't find that misleading or the source of a hard-to debug issue, so I don't see a reason to emit a warning for that.
> This issue is detected by -Wundef compiler warning in both clang and gcc.
This is a nice catch, I didn't know about it 😅. IIUC, `-Wundef` warns every time an undefined macro is expanded, but I don't see the warning and this check being mutually exclusive.
I can imagine cases when the macro is expected to be defined in a compiler argument, e.g.: `-DLOG_LEVEL=2`. In such cases the program might contain code like `#if LOG_LEVEL == 1`, `#if LOG_LEVEL == 2`, etc. In this case using `-Wundef` might be undesireable, because it would emit multiple warnings that the developers are aware of.
> 2. Create check that forbids usage of true/false in processor as an non-portable thing (could be in portability category)
> 3. Extracting 'true' case from -Wundef into separate warning like -Wundef-true
I like both of these approaches, though I prefer the 2. one because even if we extract `-Wundef-true`, `gcc` won't have the same option. How about doing option 2. and moving the check to `portability` then?
https://github.com/llvm/llvm-project/pull/128265
More information about the cfe-commits
mailing list