[Bug c++/119388] New: [12/13/14/15 Regression] -isystem does not disable warnings coming from system headers
dangelog at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Mar 20 12:29:13 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119388
Bug ID: 119388
Summary: [12/13/14/15 Regression] -isystem does not disable
warnings coming from system headers
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: dangelog at gmail dot com
Target Milestone: ---
When upgrading from GCC 11 to 13/14, some warnings start to appear from headers
that have been included via -isystem.
A minimal example would be creating a header containing this:
#include <iostream>
class Stuff {
int x;
public:
Stuff() { std::cout << x; }
};
And then including it via -isystem, and creating a Stuff object somewhere.
Under -O2 -Wall -Wextra this yields on GCC 14:
/app/my_includes/stuff.h:9:28: warning: 's.Stuff::x' is used uninitialized
[-Wuninitialized]
9 | Stuff() { std::cout << x; }
Whereas nothing was emitted on GCC 11.
I've assembled a somehow more flexible example here on Godbolt:
https://gcc.godbolt.org/z/c1Ts3ze87
You can play with:
- different GCC versions / compiler option (anything above 11 will trigger the
warning; 11 will as well, if disabling system headers)
- the `#pragma GCC system_header`
- setting SYSTEM in the CMakeLists.txt (so that CMake uses -isystem)
- disabling inlining of f() into main() (which will suppress a second warning)
In projects using Qt we're randomly seeing this for optimization-related
warnings: -Wnull-dereference, -Wstrict-overflow, -Wmaybe-uninitialized. Some
degree of optimization seems to be necessary.
Apologies, it's highly probable that there could be duplicates of this, but
bugzilla's search isn't really the best.
More information about the Gcc-bugs
mailing list