The gcc documentation, section "Declaring Attributes of Functions", states about the __attribute__ ((__warning__ ("..."))) of a function: "If this attribute is used on a function declaration and a call to such a function is not eliminated through dead code elimination or other optimizations, a warning which will include MESSAGE will be diagnosed."
Here is a case where the warning is diagnosed although the program contains no direct call to the function: =========================== main.cc =========================== extern "C" int close(int); static int (*safe_close) (int fd) = close; extern __typeof__ (close) close __attribute__ ((__warning__ ("The symbol close refers to the system function. Use safe_close instead."))); int fd; int main() { safe_close(fd); } =============================================================== $ g++ -S -O main.cc main.cc: In function 'int main()': main.cc:7:17: warning: call to 'close' declared with attribute warning: The symbol close refers to the system function. Use safe_close instead. The warning is not justified, because its only use is as initializer of the variable 'safe_close', and at that moment, the warning is not yet attached to it. Notes: - The warning occurs only with optimization, not with -O0. - The warning occurs only if the variable 'safe_close' is 'static', not when it is changed to a global variable. - The behaviour of GCC 4.3.4 and GCC 4.4.3 is the same as the one of GCC 4.5.0. -- Summary: warning attached to a function is emitted even though the function is not being called Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bruno at clisp dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881