https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96619
Bug ID: 96619 Summary: attribute deprecated immediately before a parameter has no effect Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- The following test case shows that while attribute unused suppresses a warning about unused pointer parameter regardless of its placement, attribute deprecated is not respected when it immediately precedes the parameter name. The C++ front end behaves as expected, as do Clang and ICC. $ cat t.c && gcc -S -Wall t.c void f1 (__attribute__ ((unused)) int *p) { } void g1 (int __attribute__ ((unused)) *p) { } void h1 (int *__attribute__ ((unused)) p) { } void i1 (int *p __attribute__ ((unused))) { } void* f2 (__attribute__ ((deprecated)) int *p) { return p; } void* g2 (int __attribute__ ((deprecated)) *p) { return p; } void* h2 (int *__attribute__ ((deprecated)) p) { return p; } // missing warning void* i2 (int *p __attribute__ ((deprecated))) { return p; } t.c: In function ‘f2’: t.c:6:1: warning: ‘p’ is deprecated [-Wdeprecated-declarations] 6 | void* f2 (__attribute__ ((deprecated)) int *p) { return p; } | ^~~~ t.c:6:45: note: declared here 6 | void* f2 (__attribute__ ((deprecated)) int *p) { return p; } | ~~~~~^ t.c: In function ‘g2’: t.c:7:1: warning: ‘p’ is deprecated [-Wdeprecated-declarations] 7 | void* g2 (int __attribute__ ((deprecated)) *p) { return p; } | ^~~~ t.c:7:45: note: declared here 7 | void* g2 (int __attribute__ ((deprecated)) *p) { return p; } | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ t.c: In function ‘i2’: t.c:9:1: warning: ‘p’ is deprecated [-Wdeprecated-declarations] 9 | void* i2 (int *p __attribute__ ((deprecated))) { return p; } | ^~~~ t.c:9:16: note: declared here 9 | void* i2 (int *p __attribute__ ((deprecated))) { return p; } | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~