include/ansidecl.h: import from binutils-gdb
Import include/ansidecl.h version from 2024-01-04, binutils-gdb commit fd67aa1129fd. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
dace0bfa6c
commit
10c8c1cf4f
|
@ -1,5 +1,5 @@
|
||||||
/* ANSI and traditional C compatability macros
|
/* Compiler compatibility macros
|
||||||
Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
Copyright (C) 1991-2024 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -16,18 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
/* ANSI and traditional C compatibility macros
|
/* For ease of writing code which uses GCC extensions but needs to be
|
||||||
|
|
||||||
ANSI C is assumed if __STDC__ is #defined.
|
|
||||||
|
|
||||||
Macro ANSI C definition Traditional C definition
|
|
||||||
----- ---- - ---------- ----------- - ----------
|
|
||||||
PTR `void *' `char *'
|
|
||||||
const not defined `'
|
|
||||||
volatile not defined `'
|
|
||||||
signed not defined `'
|
|
||||||
|
|
||||||
For ease of writing code which uses GCC extensions but needs to be
|
|
||||||
portable to other compilers, we provide the GCC_VERSION macro that
|
portable to other compilers, we provide the GCC_VERSION macro that
|
||||||
simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
|
simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
|
||||||
wrappers around __attribute__. Also, __extension__ will be #defined
|
wrappers around __attribute__. Also, __extension__ will be #defined
|
||||||
|
@ -62,24 +51,10 @@ So instead we use the macro below and test it against specific values. */
|
||||||
#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
|
#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
|
||||||
#endif /* GCC_VERSION */
|
#endif /* GCC_VERSION */
|
||||||
|
|
||||||
#if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32)
|
|
||||||
/* All known AIX compilers implement these things (but don't always
|
|
||||||
define __STDC__). The RISC/OS MIPS compiler defines these things
|
|
||||||
in SVR4 mode, but does not define __STDC__. */
|
|
||||||
/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other
|
|
||||||
C++ compilers, does not define __STDC__, though it acts as if this
|
|
||||||
was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
|
|
||||||
|
|
||||||
#define PTR void *
|
|
||||||
|
|
||||||
#undef const
|
|
||||||
#undef volatile
|
|
||||||
#undef signed
|
|
||||||
|
|
||||||
/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
|
/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
|
||||||
it too, but it's not in C89. */
|
it too, but it's not in C89. */
|
||||||
#undef inline
|
#undef inline
|
||||||
#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))
|
#if (!defined(__cplusplus) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))
|
||||||
/* it's a keyword */
|
/* it's a keyword */
|
||||||
#else
|
#else
|
||||||
# if GCC_VERSION >= 2007
|
# if GCC_VERSION >= 2007
|
||||||
|
@ -89,22 +64,6 @@ So instead we use the macro below and test it against specific values. */
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else /* Not ANSI C. */
|
|
||||||
|
|
||||||
#define PTR char *
|
|
||||||
|
|
||||||
/* some systems define these in header files for non-ansi mode */
|
|
||||||
#undef const
|
|
||||||
#undef volatile
|
|
||||||
#undef signed
|
|
||||||
#undef inline
|
|
||||||
#define const
|
|
||||||
#define volatile
|
|
||||||
#define signed
|
|
||||||
#define inline
|
|
||||||
|
|
||||||
#endif /* ANSI C. */
|
|
||||||
|
|
||||||
/* Define macros for some gcc attributes. This permits us to use the
|
/* Define macros for some gcc attributes. This permits us to use the
|
||||||
macros freely, and know that they will come into play for the
|
macros freely, and know that they will come into play for the
|
||||||
version of gcc in which they are supported. */
|
version of gcc in which they are supported. */
|
||||||
|
@ -252,7 +211,7 @@ So instead we use the macro below and test it against specific values. */
|
||||||
# endif /* GNUC >= 3.0 */
|
# endif /* GNUC >= 3.0 */
|
||||||
#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
|
#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
|
||||||
|
|
||||||
/* Useful for structures whose layout must much some binary specification
|
/* Useful for structures whose layout must match some binary specification
|
||||||
regardless of the alignment and padding qualities of the compiler. */
|
regardless of the alignment and padding qualities of the compiler. */
|
||||||
#ifndef ATTRIBUTE_PACKED
|
#ifndef ATTRIBUTE_PACKED
|
||||||
# define ATTRIBUTE_PACKED __attribute__ ((packed))
|
# define ATTRIBUTE_PACKED __attribute__ ((packed))
|
||||||
|
@ -283,6 +242,49 @@ So instead we use the macro below and test it against specific values. */
|
||||||
# endif /* GNUC >= 4.9 */
|
# endif /* GNUC >= 4.9 */
|
||||||
#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */
|
#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */
|
||||||
|
|
||||||
|
/* Attribute 'nonstring' was valid as of gcc 8. */
|
||||||
|
#ifndef ATTRIBUTE_NONSTRING
|
||||||
|
# if GCC_VERSION >= 8000
|
||||||
|
# define ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
|
||||||
|
# else
|
||||||
|
# define ATTRIBUTE_NONSTRING
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Attribute `alloc_size' was valid as of gcc 4.3. */
|
||||||
|
#ifndef ATTRIBUTE_RESULT_SIZE_1
|
||||||
|
# if (GCC_VERSION >= 4003)
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_1 __attribute__ ((alloc_size (1)))
|
||||||
|
# else
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ATTRIBUTE_RESULT_SIZE_2
|
||||||
|
# if (GCC_VERSION >= 4003)
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_2 __attribute__ ((alloc_size (2)))
|
||||||
|
# else
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_2
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ATTRIBUTE_RESULT_SIZE_1_2
|
||||||
|
# if (GCC_VERSION >= 4003)
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_1_2 __attribute__ ((alloc_size (1, 2)))
|
||||||
|
# else
|
||||||
|
# define ATTRIBUTE_RESULT_SIZE_1_2
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Attribute `warn_unused_result' was valid as of gcc 3.3. */
|
||||||
|
#ifndef ATTRIBUTE_WARN_UNUSED_RESULT
|
||||||
|
# if GCC_VERSION >= 3003
|
||||||
|
# define ATTRIBUTE_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
|
||||||
|
# else
|
||||||
|
# define ATTRIBUTE_WARN_UNUSED_RESULT
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* We use __extension__ in some places to suppress -pedantic warnings
|
/* We use __extension__ in some places to suppress -pedantic warnings
|
||||||
about GCC extensions. This feature didn't work properly before
|
about GCC extensions. This feature didn't work properly before
|
||||||
gcc 2.8. */
|
gcc 2.8. */
|
||||||
|
@ -313,15 +315,38 @@ So instead we use the macro below and test it against specific values. */
|
||||||
#define ENUM_BITFIELD(TYPE) unsigned int
|
#define ENUM_BITFIELD(TYPE) unsigned int
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is used to mark a class or virtual function as final. */
|
#if defined(__cplusplus) && __cpp_constexpr >= 200704
|
||||||
#if __cplusplus >= 201103L
|
#define CONSTEXPR constexpr
|
||||||
#define GCC_FINAL final
|
|
||||||
#elif GCC_VERSION >= 4007
|
|
||||||
#define GCC_FINAL __final
|
|
||||||
#else
|
#else
|
||||||
#define GCC_FINAL
|
#define CONSTEXPR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* A macro to disable the copy constructor and assignment operator.
|
||||||
|
When building with C++11 and above, the methods are explicitly
|
||||||
|
deleted, causing a compile-time error if something tries to copy.
|
||||||
|
For C++03, this just declares the methods, causing a link-time
|
||||||
|
error if the methods end up called (assuming you don't
|
||||||
|
define them). For C++03, for best results, place the macro
|
||||||
|
under the private: access specifier, like this,
|
||||||
|
|
||||||
|
class name_lookup
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
DISABLE_COPY_AND_ASSIGN (name_lookup);
|
||||||
|
};
|
||||||
|
|
||||||
|
so that most attempts at copy are caught at compile-time. */
|
||||||
|
|
||||||
|
#if defined(__cplusplus) && __cplusplus >= 201103
|
||||||
|
#define DISABLE_COPY_AND_ASSIGN(TYPE) \
|
||||||
|
TYPE (const TYPE&) = delete; \
|
||||||
|
void operator= (const TYPE &) = delete
|
||||||
|
#else
|
||||||
|
#define DISABLE_COPY_AND_ASSIGN(TYPE) \
|
||||||
|
TYPE (const TYPE&); \
|
||||||
|
void operator= (const TYPE &)
|
||||||
|
#endif /* __cplusplus >= 201103 */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue