https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62198
Bug ID: 62198 Summary: spurious warning - initialization discards qualifier from pointer target type for pointer to array Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: gary at intrepid dot com Although this bug is filed against the 5.0 trunk, it can be duplicated with at least 4.8.3. Given: $ cat q.c typedef unsigned long size_t; extern const void *alloc (size_t); int main() { const int (*X0)[10] = alloc (10 * sizeof (int)); return !X0; } When compiled with gcc 4.8.3 the following warning is issued: $ gcc -fpreprocessed -c q.c q.c: In function ‘main’: q.c:7:25: warning: initialization discards ‘const’ qualifier from pointer target type [enabled by default] const int (*X0)[10] = alloc (10 * sizeof (int)); ^ Same thing for GCC 5.0 (trunk version 214178): $ xgcc -fpreprocessed -c q.c q.c: In function ‘main’: q.c:7:25: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] const int (*X0)[10] = alloc (10 * sizeof (int)); ^ Clang 3.4 issues no warning: $ clang -Wall -pedantic -Wextra -c q.c <no output> Given that the qualifier 'const' is associated with the array's element type, it seems that the front end should derive the qualifier from the element type when it is the target type of a declared pointer, before making the "discards qualifier" check.