https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93630
Bug ID: 93630 Summary: Multi-dimensional array initialization converts empty raw strings to NULL Product: gcc Version: 9.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rodrigorivascosta at gmail dot com Target Milestone: --- Hello! Consider the following C++ code: ``` #include <stdio.h> struct Data { const char *text; }; const struct Data group[3][3] = { { {"AA"}, {"AB"}, {""}, }, { {"BA"}, {""}, {""}, }, { {""}, {""}, {"XX"}, }, }; int main() { for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) { printf("'%s'\n", group[i][j].text); } return 0; } ``` I'd expect to print the strings as they are in the code. Instead it prints: 'AA' 'AB' '(null)' 'BA' '(null)' '(null)' '' '' 'XX' That is, the trailing empty strings of each subarray are compiled as if they were NULL. Compiling it as C instead does print the expected output, as does with clang++-