http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60551
Bug ID: 60551 Summary: __attribute__((used)) is ignored for 'static' function declarations Product: gcc Version: 4.8.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at inbox dot ru // a.cc: // I plan to implement it in only one .cc module // and not this one, thus I don't need external visibility. static void friendly_accessor (void) __attribute__((used)); struct Something { friend void friendly_accessor (void); void f (void); }; // somewhere in b.cc 'friendly_accessor (void);' is implemented // and used in 'Something::f()' When compiling 'a.cc' I haven't managed to silence gcc on -Wall: > a.cc:7:17: warning: 'void friendly_accessor()' declared 'static' but never > defined [-Wunused-function] > friend void friendly_accessor (void); ^ If i'll add a definition right after declaration the warning will go away: > static void friendly_accessor (void) {} Looks like a declaration tracking bug. It's a gcc-4.8.2 on amd64.