https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116515
Bug ID: 116515
Summary: LTO link time prints warning for system headers
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
Assignee: unassigned at gcc dot gnu.org
Reporter: nunojpg at gmail dot com
Target Milestone: ---
With the following program:
```
#define FMT_HEADER_ONLY
#include <filesystem>
#include <fmt/std.h>
int main(int, char **argv)
{
std::filesystem::path p{argv[0]};
fmt::print("{}", p);
return 0;
}
```
root@f351f435510a:/# g++ -Wextra -O3 -DNDEBUG -flto=auto main.cpp -isystem
fmt/include
In function 'copy',
inlined from 'for_each_codepoint' at fmt/include/fmt/format.h:682:13,
inlined from 'find_escape' at fmt/include/fmt/format.h:1852:21,
inlined from 'write_escaped_string' at fmt/include/fmt/format.h:1944:30,
inlined from 'write_escaped_path' at fmt/include/fmt/std.h:105:60,
inlined from 'format' at fmt/include/fmt/std.h:157:31:
fmt/include/fmt/base.h:1220:31: warning: writing 8 bytes into a region of size
7 [-Wstringop-overflow=]
1220 | while (begin != end) *out++ = static_cast<T>(*begin++);
|
...
Multiple -Wstringop-overflow warnings are printed for fmt, despite fmt being
included as a system header.
This happens at link time and not compile time, and only when using LTO.
LTO doesn't appear to be respecting system headers tag for hidding warnings.
Tested with:
gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
g++ (Debian 14.2.0-1) 14.2.0