https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111219
Bug ID: 111219
Summary: -Wformat-truncation false negative with %p modifier
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: ndesaulniers at google dot com
Target Milestone: ---
I noticed that -Wformat-truncation was disabled in the linux kernel.
commit bd664f6b3e37 ("disable new gcc-7.1.1 warnings for now")
I was curious since I was unfamiliar with that flag. I filed a bug against
clang to look into implementing something similar.
https://github.com/llvm/llvm-project/issues/64871
They extended their existing -Wfortify-source flag instead (*sigh*), but we
noticed now in the Linux kernel that `-Wfortify-source` is flagging a few cases
where kernel devs have added custom format flags for pretty printing oft-used
data structures, which is tripping up this warning, since these format
specifiers are not part of the language standard.
A recent kernel patch looks to re-enable -Wformat-truncation for W=1 kernel
builds. Nathan noticed that GCC is not warning for the %p related flags,
whereas clang is (with -Wfortify-source).
I don't think GCC's current behavior is intentional?
For example, consider the following code:
```
void foo (void *x) {
char dst [1];
__builtin_snprintf(dst, sizeof(dst), "%p", x);
}
```
Clang-18 (trunk, not yet released, after
https://github.com/llvm/llvm-project/commit/0c9c9dd9a24f9d715d950fef0ac7aae01437af96)
with -Wfortify-source will warn:
```
tmp.c:3:5: warning: 'snprintf' will always be truncated; specified size is 1,
but format string expands to at least 4 [-Wfortify-source]
3 | __builtin_snprintf(dst, sizeof(dst), "%p", x);
| ^
```
GCC with -Wformat-truncation does not warn, but I think it should.