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

Reply via email to