[Bug c++/89923] New: printf format check and char8_t
drepper.fsp+rhbz at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Apr 2 11:30:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89923
Bug ID: 89923
Summary: printf format check and char8_t
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: drepper.fsp+rhbz at gmail dot com
Target Milestone: ---
With the introduction of char8_t there is a new error case in the printf format
checks:
#include <stdio.h>
int main() {
auto s = u8"hello world";
#pragma GCC diagnostic error "-Wformat"
printf("%s\n", s);
}
Compiling this with C++2a results to the following output:
$ g++ -c u.cc -std=gnu++2a
u.cc: In function ‘int main()’:
u.cc:6:12: error: format ‘%s’ expects argument of type ‘char*’, but argument 2
has type ‘const char8_t*’ [-Werror=format=]
6 | printf("%s\n", s);
| ~^ ~
| | |
| char* const char8_t*
| %hhn
I think char8_t* should be added to the allowed types for the %s parameter. It
is arguably more likely to succeed then a char* argument since the latters
encoding is determined by the compiler. At least with u8 strings the code can
make sure the locale used at runtime uses UTF-8.
More information about the Gcc-bugs
mailing list