https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78425
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2016-11-21 CC| |msebor at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- Confirmed. The location information for attributes isn't correct either in C or in C++ as the following test case shows: $ cat x.C && /build/gcc-svn/gcc/xgcc -B /build/gcc-svn/gcc -S -Wall -Wextra -xc++ x.C #define ARG_NONNULL __attribute__ ((nonnull)) #define RET_NONNULL __attribute__ ((returns_nonnull)) void ARG_NONNULL f0 (void*) RET_NONNULL; void RET_NONNULL f1 (void*) ARG_NONNULL; void __attribute__ ((nonnull)) f2 (void*) __attribute__ ((returns_nonnull)); void __attribute__ ((returns_nonnull)) f3 (void*) __attribute__ ((nonnull)); x.C:2:53: error: returns_nonnull attribute on a function not returning a pointer #define RET_NONNULL __attribute__ ((returns_nonnull)) ^ x.C:4:29: note: in expansion of macro ‘RET_NONNULL’ void ARG_NONNULL f0 (void*) RET_NONNULL; ^~~~~~~~~~~ x.C:1:45: error: returns_nonnull attribute on a function not returning a pointer #define ARG_NONNULL __attribute__ ((nonnull)) ^ x.C:5:29: note: in expansion of macro ‘ARG_NONNULL’ void RET_NONNULL f1 (void*) ARG_NONNULL; ^~~~~~~~~~~ x.C:7:75: error: returns_nonnull attribute on a function not returning a pointer void __attribute__ ((nonnull)) f2 (void*) __attribute__ ((returns_nonnull)); ^ x.C:8:75: error: returns_nonnull attribute on a function not returning a pointer void __attribute__ ((returns_nonnull)) f3 (void*) __attribute__ ((nonnull)); ^ When compiled in C mode the messages are almost as bad (though more obviously wrong and so less confusing) x.C:4:1: error: returns_nonnull attribute on a function not returning a pointer void ARG_NONNULL f0 (void*) RET_NONNULL; ^~~~ x.C:5:1: error: returns_nonnull attribute on a function not returning a pointer void RET_NONNULL f1 (void*) ARG_NONNULL; ^~~~ x.C:7:1: error: returns_nonnull attribute on a function not returning a pointer void __attribute__ ((nonnull)) f2 (void*) __attribute__ ((returns_nonnull)); ^~~~ x.C:8:1: error: returns_nonnull attribute on a function not returning a pointer void __attribute__ ((returns_nonnull)) f3 (void*) __attribute__ ((nonnull)); ^~~~