Blame m4/noreturn.m4

Packit Service f629e6
dnl Date: Sun, 26 Feb 2012 11:31:50 -0800
Packit Service f629e6
dnl From: Paul Eggert <eggert@cs.ucla.edu>
Packit Service f629e6
dnl To: arnold@skeeve.com
Packit Service f629e6
dnl CC: bug-grep@gnu.org
Packit Service f629e6
dnl Subject: Re: avoid gcc 4.6.2 'may be used before set' warnings in dfa.c
Packit Service f629e6
dnl 
Packit Service f629e6
dnl On 02/26/2012 01:18 AM, arnold@skeeve.com wrote:
Packit Service f629e6
dnl > It looks like I can just use the code as it is now in grep. I have asked
Packit Service f629e6
dnl > for compile failures and haven't gotten any.
Packit Service f629e6
dnl 
Packit Service f629e6
dnl Sure, but the gnulib support for this is better
Packit Service f629e6
dnl than what's in the dfa code.  It could be that
Packit Service f629e6
dnl your correspondents aren't using the less-common hosts
Packit Service f629e6
dnl or compiler warning options that gnulib is ported to.
Packit Service f629e6
dnl 
Packit Service f629e6
dnl In the long run stdnoreturn.h or _Noreturn is the way to go,
Packit Service f629e6
dnl since they're part of the C standard.
Packit Service f629e6
dnl 
Packit Service f629e6
dnl If you'd rather not create a separate file, how about if
Packit Service f629e6
dnl we change the dfa code to use _Noreturn instead of
Packit Service f629e6
dnl <stdnoreturn.h> and noreturn, and you can put the
Packit Service f629e6
dnl following into your configure.ac so that config.h
Packit Service f629e6
dnl defines _Noreturn the same way gnulib does:
Packit Service f629e6
Packit Service f629e6
AC_DEFUN([GAWK_AC_NORETURN],[
Packit Service f629e6
AH_VERBATIM([_Noreturn],
Packit Service f629e6
[/* The _Noreturn keyword of C11.  */
Packit Service f629e6
#ifndef _Noreturn
Packit Service f629e6
# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
Packit Service f629e6
      || 0x5110 <= __SUNPRO_C)
Packit Service f629e6
#  define _Noreturn __attribute__ ((__noreturn__))
Packit Service f629e6
# elif defined _MSC_VER && 1200 <= _MSC_VER
Packit Service f629e6
#  define _Noreturn __declspec (noreturn)
Packit Service f629e6
# else
Packit Service f629e6
#  define _Noreturn
Packit Service f629e6
# endif
Packit Service f629e6
#endif
Packit Service f629e6
])])