It would be nice if __attribute__((warning(""))) (and error) worked anywhere
that __attribute__((deprecated)) is accepted.  After all, there are other
reasons to warn other than deprecation, and the warning attribute allows an
explanation string.

However, as of gcc 4.3.4, attribute((warning)) is silently ignored on
variables.  The best fix would be issuing the warning, as is done for
deprecation.  But if that can't be done, for whatever reason, then an
alternative would be to emit an error at the point of the __attribute__ stating
that the attribute is invalid on variables and only implemented for functions,
as is done when using the wrong arguments to __warning__, rather than the
current behavior of silently ignoring the attribute with the correct arguments.


$ cat foo.c
#include <stdio.h>
int a __attribute__((warning("warn1")));
int b __attribute__((error("err2")));
int c __attribute__((deprecated));
int d __attribute__((warning));
int
main ()
{
  printf ("%d\n", a);
  printf ("%d\n", b);
  printf ("%d\n", c);
}
$ gcc -Wall -o foo foo.c
foo.c:5: error: wrong number of arguments specified for ‘warning’ attribute
foo.c: In function ‘main’:
foo.c:10: warning: ‘c’ is deprecated (declared at foo.c:4)


-- 
           Summary: attribute((warning(""))) should work for variables
           Product: gcc
           Version: 4.3.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ebb9 at byu dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42562

Reply via email to