github.com/searKing/golang/go@v1.2.117/runtime/cgosymbolizer/include/boost/config/compiler/gcc.hpp (about)

     1  //  (C) Copyright John Maddock 2001 - 2003.
     2  //  (C) Copyright Darin Adler 2001 - 2002.
     3  //  (C) Copyright Jens Maurer 2001 - 2002.
     4  //  (C) Copyright Beman Dawes 2001 - 2003.
     5  //  (C) Copyright Douglas Gregor 2002.
     6  //  (C) Copyright David Abrahams 2002 - 2003.
     7  //  (C) Copyright Synge Todo 2003.
     8  //  Use, modification and distribution are subject to the
     9  //  Boost Software License, Version 1.0. (See accompanying file
    10  //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    11  
    12  //  See http://www.boost.org for most recent version.
    13  
    14  //  GNU C++ compiler setup.
    15  
    16  //
    17  // Define BOOST_GCC so we know this is "real" GCC and not some pretender:
    18  //
    19  #define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
    20  #if !defined(__CUDACC__)
    21  #define BOOST_GCC BOOST_GCC_VERSION
    22  #endif
    23  
    24  #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
    25  #  define BOOST_GCC_CXX11
    26  #endif
    27  
    28  #if __GNUC__ == 3
    29  #  if defined (__PATHSCALE__)
    30  #     define BOOST_NO_TWO_PHASE_NAME_LOOKUP
    31  #     define BOOST_NO_IS_ABSTRACT
    32  #  endif
    33  
    34  #  if __GNUC_MINOR__ < 4
    35  #     define BOOST_NO_IS_ABSTRACT
    36  #  endif
    37  #  define BOOST_NO_CXX11_EXTERN_TEMPLATE
    38  #endif
    39  #if __GNUC__ < 4
    40  //
    41  // All problems to gcc-3.x and earlier here:
    42  //
    43  #define BOOST_NO_TWO_PHASE_NAME_LOOKUP
    44  #  ifdef __OPEN64__
    45  #     define BOOST_NO_IS_ABSTRACT
    46  #  endif
    47  #endif
    48  
    49  // GCC prior to 3.4 had #pragma once too but it didn't work well with filesystem links
    50  #if BOOST_GCC_VERSION >= 30400
    51  #define BOOST_HAS_PRAGMA_ONCE
    52  #endif
    53  
    54  #if BOOST_GCC_VERSION < 40400
    55  // Previous versions of GCC did not completely implement value-initialization:
    56  // GCC Bug 30111, "Value-initialization of POD base class doesn't initialize
    57  // members", reported by Jonathan Wakely in 2006,
    58  // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4)
    59  // GCC Bug 33916, "Default constructor fails to initialize array members",
    60  // reported by Michael Elizabeth Chastain in 2007,
    61  // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4)
    62  // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
    63  #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
    64  #endif
    65  
    66  #if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
    67  # define BOOST_NO_EXCEPTIONS
    68  #endif
    69  
    70  
    71  //
    72  // Threading support: Turn this on unconditionally here (except for
    73  // those platforms where we can know for sure). It will get turned off again
    74  // later if no threading API is detected.
    75  //
    76  #if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)
    77  # define BOOST_HAS_THREADS
    78  #endif
    79  
    80  //
    81  // gcc has "long long"
    82  // Except on Darwin with standard compliance enabled (-pedantic)
    83  // Apple gcc helpfully defines this macro we can query
    84  //
    85  #if !defined(__DARWIN_NO_LONG_LONG)
    86  # define BOOST_HAS_LONG_LONG
    87  #endif
    88  
    89  //
    90  // gcc implements the named return value optimization since version 3.1
    91  //
    92  #define BOOST_HAS_NRVO
    93  
    94  // Branch prediction hints
    95  #define BOOST_LIKELY(x) __builtin_expect(x, 1)
    96  #define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
    97  
    98  //
    99  // Dynamic shared object (DSO) and dynamic-link library (DLL) support
   100  //
   101  #if __GNUC__ >= 4
   102  #  if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__)
   103       // All Win32 development environments, including 64-bit Windows and MinGW, define
   104       // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment,
   105       // so does not define _WIN32 or its variants, but still supports dllexport/dllimport.
   106  #    define BOOST_HAS_DECLSPEC
   107  #    define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__))
   108  #    define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__))
   109  #  else
   110  #    define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
   111  #    define BOOST_SYMBOL_IMPORT
   112  #  endif
   113  #  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
   114  #else
   115  // config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
   116  #  define BOOST_SYMBOL_EXPORT
   117  #endif
   118  
   119  //
   120  // RTTI and typeinfo detection is possible post gcc-4.3:
   121  //
   122  #if BOOST_GCC_VERSION > 40300
   123  #  ifndef __GXX_RTTI
   124  #     ifndef BOOST_NO_TYPEID
   125  #        define BOOST_NO_TYPEID
   126  #     endif
   127  #     ifndef BOOST_NO_RTTI
   128  #        define BOOST_NO_RTTI
   129  #     endif
   130  #  endif
   131  #endif
   132  
   133  //
   134  // Recent GCC versions have __int128 when in 64-bit mode.
   135  //
   136  // We disable this if the compiler is really nvcc with C++03 as it
   137  // doesn't actually support __int128 as of CUDA_VERSION=7500
   138  // even though it defines __SIZEOF_INT128__.
   139  // See https://svn.boost.org/trac/boost/ticket/8048
   140  //     https://svn.boost.org/trac/boost/ticket/11852
   141  // Only re-enable this for nvcc if you're absolutely sure
   142  // of the circumstances under which it's supported:
   143  //
   144  #if defined(__CUDACC__)
   145  #  if defined(BOOST_GCC_CXX11)
   146  #    define BOOST_NVCC_CXX11
   147  #  else
   148  #    define BOOST_NVCC_CXX03
   149  #  endif
   150  #endif
   151  
   152  #if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03)
   153  #  define BOOST_HAS_INT128
   154  #endif
   155  //
   156  // Recent GCC versions have a __float128 native type, we need to
   157  // include a std lib header to detect this - not ideal, but we'll
   158  // be including <cstddef> later anyway when we select the std lib.
   159  //
   160  // Nevertheless, as of CUDA 7.5, using __float128 with the host
   161  // compiler in pre-C++11 mode is still not supported.
   162  // See https://svn.boost.org/trac/boost/ticket/11852
   163  //
   164  #ifdef __cplusplus
   165  #include <cstddef>
   166  #else
   167  #include <stddef.h>
   168  #endif
   169  #if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) && !defined(BOOST_NVCC_CXX03)
   170  # define BOOST_HAS_FLOAT128
   171  #endif
   172  
   173  // C++0x features in 4.3.n and later
   174  //
   175  #if (BOOST_GCC_VERSION >= 40300) && defined(BOOST_GCC_CXX11)
   176  // C++0x features are only enabled when -std=c++0x or -std=gnu++0x are
   177  // passed on the command line, which in turn defines
   178  // __GXX_EXPERIMENTAL_CXX0X__.
   179  #  define BOOST_HAS_DECLTYPE
   180  #  define BOOST_HAS_RVALUE_REFS
   181  #  define BOOST_HAS_STATIC_ASSERT
   182  #  define BOOST_HAS_VARIADIC_TMPL
   183  #else
   184  #  define BOOST_NO_CXX11_DECLTYPE
   185  #  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
   186  #  define BOOST_NO_CXX11_RVALUE_REFERENCES
   187  #  define BOOST_NO_CXX11_STATIC_ASSERT
   188  #endif
   189  
   190  // C++0x features in 4.4.n and later
   191  //
   192  #if (BOOST_GCC_VERSION < 40400) || !defined(BOOST_GCC_CXX11)
   193  #  define BOOST_NO_CXX11_AUTO_DECLARATIONS
   194  #  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
   195  #  define BOOST_NO_CXX11_CHAR16_T
   196  #  define BOOST_NO_CXX11_CHAR32_T
   197  #  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
   198  #  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
   199  #  define BOOST_NO_CXX11_DELETED_FUNCTIONS
   200  #  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
   201  #  define BOOST_NO_CXX11_INLINE_NAMESPACES
   202  #  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
   203  #endif
   204  
   205  #if BOOST_GCC_VERSION < 40500
   206  #  define BOOST_NO_SFINAE_EXPR
   207  #endif
   208  
   209  // GCC 4.5 forbids declaration of defaulted functions in private or protected sections
   210  #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 5) || !defined(BOOST_GCC_CXX11)
   211  #  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
   212  #endif
   213  
   214  // C++0x features in 4.5.0 and later
   215  //
   216  #if (BOOST_GCC_VERSION < 40500) || !defined(BOOST_GCC_CXX11)
   217  #  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
   218  #  define BOOST_NO_CXX11_LAMBDAS
   219  #  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
   220  #  define BOOST_NO_CXX11_RAW_LITERALS
   221  #  define BOOST_NO_CXX11_UNICODE_LITERALS
   222  #endif
   223  
   224  // C++0x features in 4.5.1 and later
   225  //
   226  #if (BOOST_GCC_VERSION < 40501) || !defined(BOOST_GCC_CXX11)
   227  // scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1
   228  // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064
   229  #  define BOOST_NO_CXX11_SCOPED_ENUMS
   230  #endif
   231  
   232  // C++0x features in 4.6.n and later
   233  //
   234  #if (BOOST_GCC_VERSION < 40600) || !defined(BOOST_GCC_CXX11)
   235  #define BOOST_NO_CXX11_DEFAULTED_MOVES
   236  #define BOOST_NO_CXX11_NOEXCEPT
   237  #define BOOST_NO_CXX11_NULLPTR
   238  #define BOOST_NO_CXX11_RANGE_BASED_FOR
   239  #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
   240  #endif
   241  
   242  // C++0x features in 4.7.n and later
   243  //
   244  #if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11)
   245  // Note that while constexpr is partly supported in gcc-4.6 it's a 
   246  // pre-std version with several bugs:
   247  #  define BOOST_NO_CXX11_CONSTEXPR
   248  #  define BOOST_NO_CXX11_FINAL
   249  #  define BOOST_NO_CXX11_TEMPLATE_ALIASES
   250  #  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
   251  #  define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
   252  #  define BOOST_NO_CXX11_OVERRIDE
   253  #endif
   254  
   255  // C++0x features in 4.8.n and later
   256  //
   257  #if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11)
   258  #  define BOOST_NO_CXX11_THREAD_LOCAL
   259  #  define BOOST_NO_CXX11_SFINAE_EXPR
   260  #endif
   261  
   262  // C++0x features in 4.8.1 and later
   263  //
   264  #if (BOOST_GCC_VERSION < 40801) || !defined(BOOST_GCC_CXX11)
   265  #  define BOOST_NO_CXX11_DECLTYPE_N3276
   266  #  define BOOST_NO_CXX11_REF_QUALIFIERS
   267  #  define BOOST_NO_CXX14_BINARY_LITERALS
   268  #endif
   269  
   270  // C++0x features in 4.9.n and later
   271  //
   272  #if (BOOST_GCC_VERSION < 40900) || !defined(BOOST_GCC_CXX11)
   273  // Although alignas support is added in gcc 4.8, it does not accept
   274  // constant expressions as an argument until gcc 4.9.
   275  #  define BOOST_NO_CXX11_ALIGNAS
   276  #endif
   277  
   278  // C++0x features in 5.1 and later
   279  //
   280  #if (BOOST_GCC_VERSION < 50100) || !defined(BOOST_GCC_CXX11)
   281  #  define BOOST_NO_CXX11_UNRESTRICTED_UNION
   282  #endif
   283  
   284  // C++14 features in 4.9.0 and later
   285  //
   286  #if (BOOST_GCC_VERSION < 40900) || (__cplusplus < 201300)
   287  #  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
   288  #  define BOOST_NO_CXX14_GENERIC_LAMBDAS
   289  #  define BOOST_NO_CXX14_DIGIT_SEPARATORS
   290  #  define BOOST_NO_CXX14_DECLTYPE_AUTO
   291  #  if !((BOOST_GCC_VERSION >= 40801) && (BOOST_GCC_VERSION < 40900) && defined(BOOST_GCC_CXX11))
   292  #     define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
   293  #  endif
   294  #endif
   295  
   296  
   297  // C++ 14:
   298  #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
   299  #  define BOOST_NO_CXX14_AGGREGATE_NSDMI
   300  #endif
   301  #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
   302  #  define BOOST_NO_CXX14_CONSTEXPR
   303  #endif
   304  #if (BOOST_GCC_VERSION < 50200) || !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
   305  #  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
   306  #endif
   307  
   308  // C++17
   309  #if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606)
   310  #  define BOOST_NO_CXX17_STRUCTURED_BINDINGS
   311  #endif
   312  #if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606)
   313  #  define BOOST_NO_CXX17_INLINE_VARIABLES
   314  #endif
   315  #if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603)
   316  #  define BOOST_NO_CXX17_FOLD_EXPRESSIONS
   317  #endif
   318  #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606)
   319  #  define BOOST_NO_CXX17_IF_CONSTEXPR
   320  #endif
   321  
   322  #if __GNUC__ >= 7
   323  #  define BOOST_FALLTHROUGH __attribute__((fallthrough))
   324  #endif
   325  
   326  #if defined(__MINGW32__) && !defined(__MINGW64__)
   327  // Currently (March 2019) thread_local is broken on mingw for all current 32bit compiler releases, see
   328  // https://sourceforge.net/p/mingw-w64/bugs/527/
   329  // Not setting this causes program termination on thread exit.
   330  #define BOOST_NO_CXX11_THREAD_LOCAL
   331  #endif
   332  
   333  //
   334  // Unused attribute:
   335  #if __GNUC__ >= 4
   336  #  define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))
   337  #endif
   338  
   339  // Type aliasing hint. Supported since gcc 3.3.
   340  #define BOOST_MAY_ALIAS __attribute__((__may_alias__))
   341  
   342  //
   343  // __builtin_unreachable:
   344  #if BOOST_GCC_VERSION >= 40500
   345  #define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
   346  #endif
   347  
   348  #ifndef BOOST_COMPILER
   349  #  define BOOST_COMPILER "GNU C++ version " __VERSION__
   350  #endif
   351  
   352  // ConceptGCC compiler:
   353  //   http://www.generic-programming.org/software/ConceptGCC/
   354  #ifdef __GXX_CONCEPTS__
   355  #  define BOOST_HAS_CONCEPTS
   356  #  define BOOST_COMPILER "ConceptGCC version " __VERSION__
   357  #endif
   358  
   359  // versions check:
   360  // we don't know gcc prior to version 3.30:
   361  #if (BOOST_GCC_VERSION< 30300)
   362  #  error "Compiler not configured - please reconfigure"
   363  #endif
   364  //
   365  // last known and checked version is 8.1:
   366  #if (BOOST_GCC_VERSION > 80100)
   367  #  if defined(BOOST_ASSERT_CONFIG)
   368  #     error "Boost.Config is older than your compiler - please check for an updated Boost release."
   369  #  else
   370  // we don't emit warnings here anymore since there are no defect macros defined for
   371  // gcc post 3.4, so any failures are gcc regressions...
   372  //#     warning "boost: Unknown compiler version - please run the configure tests and report the results"
   373  #  endif
   374  #endif
   375