https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91809
Bug ID: 91809 Summary: in c++ bit-field is not promoted to int in printf argument Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nsz at gcc dot gnu.org Target Milestone: --- may be a -Wformat bug only, but the c++ front-end seems to use the wrong type: #include <stdio.h> struct X { unsigned long long a: 1; } x; void foo() { printf("%d", x.a); } gcc -Wformat -xc++ says a.c: In function 'void foo()': a.c:9:12: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long unsigned int' [-Wformat=] 9 | printf("%d", x.a); | ~^ ~~~ | | | | int long long unsigned int | %lld the warning is not present with -xc, which is the expected behaviour: bit-field should be promoted to int in this context, i don't think c++ should behave differently. (not a new regression, at least present since gcc-4.8)