Let gcc generate a warning or an error?

Marc Glisse marc.glisse@normalesup.org
Sat Dec 27 04:57:00 GMT 2008


On Thu, 25 Dec 2008, Georg-Johann Lay wrote:

>        __builtin_error ("foo must be used with a compile time constant");
>
> Is there a way to generate an error/warning/info by making gcc
> call error/warning/info?

The following is an example taken randomly from glibc, it should be enough 
to get the idea (may require gcc-4.3+):

sys/cdefs.h:
# define __warndecl(name, msg) \
   extern void name (void) __attribute__((__warning__ (msg)))
# define __warnattr(msg) __attribute__((__warning__ (msg)))
# define __errordecl(name, msg) \
   extern void name (void) __attribute__((__error__ (msg)))

bits/fcntl2.h:
__errordecl (__open_too_many_args,
              "open can be called either with 2 or 3 arguments, not more");
__errordecl (__open_missing_mode,
              "open with O_CREAT in second argument needs 3 arguments");

__extern_always_inline int
open (__const char *__path, int __oflag, ...)
{
   if (__va_arg_pack_len () > 1)
     __open_too_many_args ();

   if (__builtin_constant_p (__oflag))
     {
       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
         {
           __open_missing_mode ();
           return __open_2 (__path, __oflag);
         }
       return __open_alias (__path, __oflag, __va_arg_pack ());
     }

   if (__va_arg_pack_len () < 1)
     return __open_2 (__path, __oflag);

   return __open_alias (__path, __oflag, __va_arg_pack ());
}


-- 
Marc Glisse



More information about the Gcc-help mailing list