uchar C++ tests: Fix build error on FreeBSD 12.
[gnulib.git] / lib / stdnoreturn.in.h
blob05aff81c2c0ec90eaaf9f31f5b0bcb6b17d9b650
1 /* A substitute for ISO C11 <stdnoreturn.h>.
3 Copyright 2012-2020 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, see <https://www.gnu.org/licenses/>. */
18 /* Written by Paul Eggert. */
20 #ifndef noreturn
22 /* ISO C11 <stdnoreturn.h> for platforms that lack it.
24 References:
25 ISO C11 (latest free draft
26 <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>)
27 section 7.23 */
29 /* The definition of _Noreturn is copied here. */
31 #if 1200 <= _MSC_VER || defined __CYGWIN__
32 /* On MSVC, standard include files contain declarations like
33 __declspec (noreturn) void abort (void);
34 "#define noreturn _Noreturn" would cause this declaration to be rewritten
35 to the invalid
36 __declspec (__declspec (noreturn)) void abort (void);
38 Similarly, on Cygwin, standard include files contain declarations like
39 void __cdecl abort (void) __attribute__ ((noreturn));
40 "#define noreturn _Noreturn" would cause this declaration to be rewritten
41 to the invalid
42 void __cdecl abort (void) __attribute__ ((__attribute__ ((__noreturn__))));
44 Instead, define noreturn to empty, so that such declarations are rewritten to
45 __declspec () void abort (void);
47 void __cdecl abort (void) __attribute__ (());
48 respectively. This gives up on noreturn's advice to the compiler but at
49 least it is valid code. */
50 # define noreturn /*empty*/
51 #else
52 # define noreturn _Noreturn
53 #endif
55 /* Did he ever return?
56 No he never returned
57 And his fate is still unlearn'd ...
58 -- Steiner J, Hawes BL. M.T.A. (1949) */
60 #endif /* noreturn */