123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- /* SPDX-License-Identifier: MIT
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Copyright:
- * 2017-2020 Evan Nemerson <evan@nemerson.com>
- */
- /* SIMDe targets a very wide range of standards and compilers, and our
- * goal is to compile cleanly even with extremely aggressive warnings
- * (i.e., -Weverything in clang, -Wextra in GCC, /W4 for MSVC, etc.)
- * treated as errors.
- *
- * While our preference is to resolve the underlying issue a given
- * diagnostic is warning us about, sometimes that's not possible.
- * Fixing a warning in one compiler may cause problems in another.
- * Sometimes a warning doesn't really apply to us (false positives),
- * and sometimes adhering to a warning would mean dropping a feature
- * we *know* the compiler supports since we have tested specifically
- * for the compiler or feature.
- *
- * When practical, warnings are only disabled for specific code. For
- * a list of warnings which are enabled by default in all SIMDe code,
- * see SIMDE_DISABLE_UNWANTED_DIAGNOSTICS. Note that we restore the
- * warning stack when SIMDe is done parsing, so code which includes
- * SIMDe is not deprived of these warnings.
- */
- #if !defined(SIMDE_DIAGNOSTIC_H)
- #define SIMDE_DIAGNOSTIC_H
- #include "hedley.h"
- #include "simde-detect-clang.h"
- #include "simde-arch.h"
- /* This is only to help us implement functions like _mm_undefined_ps. */
- #if defined(SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_)
- #undef SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_
- #endif
- #if HEDLEY_HAS_WARNING("-Wuninitialized")
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("clang diagnostic ignored \"-Wuninitialized\"")
- #elif HEDLEY_GCC_VERSION_CHECK(4,2,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"")
- #elif HEDLEY_PGI_VERSION_CHECK(19,10,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("diag_suppress 549")
- #elif HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,SEC_UNINITIALIZED_MEM_READ,SEC_UNDEFINED_RETURN_VALUE,unassigned)")
- #elif HEDLEY_SUNPRO_VERSION_CHECK(5,14,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,SEC_UNINITIALIZED_MEM_READ,SEC_UNDEFINED_RETURN_VALUE)")
- #elif HEDLEY_SUNPRO_VERSION_CHECK(5,12,0) && defined(__cplusplus)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("error_messages(off,unassigned)")
- #elif \
- HEDLEY_TI_VERSION_CHECK(16,9,9) || \
- HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
- HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
- HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,2)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("diag_suppress 551")
- #elif HEDLEY_INTEL_VERSION_CHECK(13,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ _Pragma("warning(disable:592)")
- #elif HEDLEY_MSVC_VERSION_CHECK(19,0,0) && !defined(__MSVC_RUNTIME_CHECKS)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_ __pragma(warning(disable:4700))
- #endif
- /* GCC emits a lot of "notes" about the ABI being different for things
- * in newer versions of GCC. We don't really care because all our
- * functions are inlined and don't generate ABI. */
- #if HEDLEY_GCC_VERSION_CHECK(7,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_PSABI_ _Pragma("GCC diagnostic ignored \"-Wpsabi\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_PSABI_
- #endif
- /* Since MMX uses x87 FP registers, you're supposed to call _mm_empty()
- * after each MMX function before any floating point instructions.
- * Some compilers warn about functions which use MMX functions but
- * don't call _mm_empty(). However, since SIMDe is implementyng the
- * MMX API we shouldn't be calling _mm_empty(); we leave it to the
- * caller to invoke simde_mm_empty(). */
- #if HEDLEY_INTEL_VERSION_CHECK(19,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ _Pragma("warning(disable:13200 13203)")
- #elif defined(HEDLEY_MSVC_VERSION)
- #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ __pragma(warning(disable:4799))
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_
- #endif
- /* Intel is pushing people to use OpenMP SIMD instead of Cilk+, so they
- * emit a diagnostic if you use #pragma simd instead of
- * #pragma omp simd. SIMDe supports OpenMP SIMD, you just need to
- * compile with -qopenmp or -qopenmp-simd and define
- * SIMDE_ENABLE_OPENMP. Cilk+ is just a fallback. */
- #if HEDLEY_INTEL_VERSION_CHECK(18,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_ _Pragma("warning(disable:3948)")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_
- #endif
- /* MSVC emits a diagnostic when we call a function (like
- * simde_mm_set_epi32) while initializing a struct. We currently do
- * this a *lot* in the tests. */
- #if \
- defined(HEDLEY_MSVC_VERSION)
- #define SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_ __pragma(warning(disable:4204))
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_
- #endif
- /* This warning needs a lot of work. It is triggered if all you do is
- * pass the value to memcpy/__builtin_memcpy, or if you initialize a
- * member of the union, even if that member takes up the entire union.
- * Last tested with clang-10, hopefully things will improve in the
- * future; if clang fixes this I'd love to enable it. */
- #if \
- HEDLEY_HAS_WARNING("-Wconditional-uninitialized")
- #define SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_ _Pragma("clang diagnostic ignored \"-Wconditional-uninitialized\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_
- #endif
- /* This warning is meant to catch things like `0.3 + 0.4 == 0.7`, which
- * will is false. However, SIMDe uses these operations exclusively
- * for things like _mm_cmpeq_ps, for which we really do want to check
- * for equality (or inequality).
- *
- * If someone wants to put together a SIMDE_FLOAT_EQUAL(a, op, b) macro
- * which just wraps a check in some code do disable this diagnostic I'd
- * be happy to accept it. */
- #if \
- HEDLEY_HAS_WARNING("-Wfloat-equal") || \
- HEDLEY_GCC_VERSION_CHECK(3,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_ _Pragma("GCC diagnostic ignored \"-Wfloat-equal\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_
- #endif
- /* This is because we use HEDLEY_STATIC_ASSERT for static assertions.
- * If Hedley can't find an implementation it will preprocess to
- * nothing, which means there will be a trailing semi-colon. */
- #if HEDLEY_HAS_WARNING("-Wextra-semi")
- #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ _Pragma("clang diagnostic ignored \"-Wextra-semi\"")
- #elif HEDLEY_GCC_VERSION_CHECK(8,1,0) && defined(__cplusplus)
- #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ _Pragma("GCC diagnostic ignored \"-Wextra-semi\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_
- #endif
- /* We do use a few variadic macros, which technically aren't available
- * until C99 and C++11, but every compiler I'm aware of has supported
- * them for much longer. That said, usage is isolated to the test
- * suite and compilers known to support them. */
- #if HEDLEY_HAS_WARNING("-Wvariadic-macros") || HEDLEY_GCC_VERSION_CHECK(4,0,0)
- #if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic")
- #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ \
- _Pragma("clang diagnostic ignored \"-Wvariadic-macros\"") \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_ _Pragma("GCC diagnostic ignored \"-Wvariadic-macros\"")
- #endif
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_
- #endif
- /* emscripten requires us to use a __wasm_unimplemented_simd128__ macro
- * before we can access certain SIMD intrinsics, but this diagnostic
- * warns about it being a reserved name. It is a reserved name, but
- * it's reserved for the compiler and we are using it to convey
- * information to the compiler.
- *
- * This is also used when enabling native aliases since we don't get to
- * choose the macro names. */
- #if HEDLEY_HAS_WARNING("-Wreserved-id-macro")
- #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_ _Pragma("clang diagnostic ignored \"-Wreserved-id-macro\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_
- #endif
- /* Similar to above; types like simde__m128i are reserved due to the
- * double underscore, but we didn't choose them, Intel did. */
- #if HEDLEY_HAS_WARNING("-Wreserved-identifier")
- #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_ _Pragma("clang diagnostic ignored \"-Wreserved-identifier\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_
- #endif
- /* clang 3.8 warns about the packed attribute being unnecessary when
- * used in the _mm_loadu_* functions. That *may* be true for version
- * 3.8, but for later versions it is crucial in order to make unaligned
- * access safe. */
- #if HEDLEY_HAS_WARNING("-Wpacked")
- #define SIMDE_DIAGNOSTIC_DISABLE_PACKED_ _Pragma("clang diagnostic ignored \"-Wpacked\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_PACKED_
- #endif
- /* Triggered when assigning a float to a double implicitly. We use
- * explicit casts in SIMDe, this is only used in the test suite. */
- #if HEDLEY_HAS_WARNING("-Wdouble-promotion")
- #define SIMDE_DIAGNOSTIC_DISABLE_DOUBLE_PROMOTION_ _Pragma("clang diagnostic ignored \"-Wdouble-promotion\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_DOUBLE_PROMOTION_
- #endif
- /* Several compilers treat conformant array parameters as VLAs. We
- * test to make sure we're in C mode (C++ doesn't support CAPs), and
- * that the version of the standard supports CAPs. We also reject
- * some buggy compilers like MSVC (the logic is in Hedley if you want
- * to take a look), but with certain warnings enabled some compilers
- * still like to emit a diagnostic. */
- #if HEDLEY_HAS_WARNING("-Wvla")
- #define SIMDE_DIAGNOSTIC_DISABLE_VLA_ _Pragma("clang diagnostic ignored \"-Wvla\"")
- #elif HEDLEY_GCC_VERSION_CHECK(4,3,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_VLA_ _Pragma("GCC diagnostic ignored \"-Wvla\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_VLA_
- #endif
- /* If you add an unused attribute to a function and don't use it, clang
- * may emit this. */
- #if HEDLEY_HAS_WARNING("-Wused-but-marked-unused")
- #define SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ _Pragma("clang diagnostic ignored \"-Wused-but-marked-unused\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_
- #endif
- #if HEDLEY_HAS_WARNING("-Wpass-failed")
- #define SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_ _Pragma("clang diagnostic ignored \"-Wpass-failed\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_
- #endif
- #if HEDLEY_HAS_WARNING("-Wpadded")
- #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_ _Pragma("clang diagnostic ignored \"-Wpadded\"")
- #elif HEDLEY_MSVC_VERSION_CHECK(19,0,0) /* Likely goes back further */
- #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_ __pragma(warning(disable:4324))
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_PADDED_
- #endif
- #if HEDLEY_HAS_WARNING("-Wzero-as-null-pointer-constant")
- #define SIMDE_DIAGNOSTIC_DISABLE_ZERO_AS_NULL_POINTER_CONSTANT_ _Pragma("clang diagnostic ignored \"-Wzero-as-null-pointer-constant\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_ZERO_AS_NULL_POINTER_CONSTANT_
- #endif
- #if HEDLEY_HAS_WARNING("-Wold-style-cast")
- #define SIMDE_DIAGNOSTIC_DISABLE_OLD_STYLE_CAST_ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_OLD_STYLE_CAST_
- #endif
- #if HEDLEY_HAS_WARNING("-Wcast-function-type") || HEDLEY_GCC_VERSION_CHECK(8,0,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_CAST_FUNCTION_TYPE_ _Pragma("GCC diagnostic ignored \"-Wcast-function-type\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_CAST_FUNCTION_TYPE_
- #endif
- /* clang will emit this warning when we use C99 extensions when not in
- * C99 mode, even though it does support this. In such cases we check
- * the compiler and version first, so we know it's not a problem. */
- #if HEDLEY_HAS_WARNING("-Wc99-extensions")
- #define SIMDE_DIAGNOSTIC_DISABLE_C99_EXTENSIONS_ _Pragma("clang diagnostic ignored \"-Wc99-extensions\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_C99_EXTENSIONS_
- #endif
- /* Similar problm as above; we rely on some basic C99 support, but clang
- * has started warning obut this even in C17 mode with -Weverything. */
- #if HEDLEY_HAS_WARNING("-Wdeclaration-after-statement")
- #define SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_ _Pragma("clang diagnostic ignored \"-Wdeclaration-after-statement\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_
- #endif
- /* https://github.com/simd-everywhere/simde/issues/277 */
- #if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(4,6,0) && !HEDLEY_GCC_VERSION_CHECK(6,4,0) && defined(__cplusplus)
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_ _Pragma("GCC diagnostic ignored \"-Wunused-but-set-variable\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_
- #endif
- /* This is the warning that you normally define _CRT_SECURE_NO_WARNINGS
- * to silence, but you have to do that before including anything and
- * that would require reordering includes. */
- #if defined(_MSC_VER)
- #define SIMDE_DIAGNOSTIC_DISABLE_ANNEX_K_ __pragma(warning(disable:4996))
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_ANNEX_K_
- #endif
- /* Some compilers, such as clang, may use `long long` for 64-bit
- * integers, but `long long` triggers a diagnostic with
- * -Wc++98-compat-pedantic which says 'long long' is incompatible with
- * C++98. */
- #if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic")
- #if HEDLEY_HAS_WARNING("-Wc++11-long-long")
- #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") \
- _Pragma("clang diagnostic ignored \"-Wc++11-long-long\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"")
- #endif
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_
- #endif
- /* Some problem as above */
- #if HEDLEY_HAS_WARNING("-Wc++11-long-long")
- #define SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_ _Pragma("clang diagnostic ignored \"-Wc++11-long-long\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_
- #endif
- /* emscripten emits this whenever stdin/stdout/stderr is used in a
- * macro. */
- #if HEDLEY_HAS_WARNING("-Wdisabled-macro-expansion")
- #define SIMDE_DIAGNOSTIC_DISABLE_DISABLED_MACRO_EXPANSION_ _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_DISABLED_MACRO_EXPANSION_
- #endif
- /* Clang uses C11 generic selections to implement some AltiVec
- * functions, which triggers this diagnostic when not compiling
- * in C11 mode */
- #if HEDLEY_HAS_WARNING("-Wc11-extensions")
- #define SIMDE_DIAGNOSTIC_DISABLE_C11_EXTENSIONS_ _Pragma("clang diagnostic ignored \"-Wc11-extensions\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_C11_EXTENSIONS_
- #endif
- /* Clang sometimes triggers this warning in macros in the AltiVec and
- * NEON headers, or due to missing functions. */
- #if HEDLEY_HAS_WARNING("-Wvector-conversion")
- #define SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_ _Pragma("clang diagnostic ignored \"-Wvector-conversion\"")
- /* For NEON, the situation with -Wvector-conversion in clang < 10 is
- * bad enough that we just disable the warning altogether. On x86,
- * clang has similar issues on several sse4.2+ intrinsics before 3.8. */
- #if \
- (defined(SIMDE_ARCH_ARM) && SIMDE_DETECT_CLANG_VERSION_NOT(10,0,0)) || \
- SIMDE_DETECT_CLANG_VERSION_NOT(3,8,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_ SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_
- #endif
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_VECTOR_CONVERSION_
- #endif
- #if !defined(SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_)
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_
- #endif
- /* Prior to 5.0, clang didn't support disabling diagnostics in
- * statement exprs. As a result, some macros we use don't
- * properly silence warnings. */
- #if SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-qual") && HEDLEY_HAS_WARNING("-Wcast-align")
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-qual\"") _Pragma("clang diagnostic ignored \"-Wcast-align\"")
- #elif SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-qual")
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
- #elif SIMDE_DETECT_CLANG_VERSION_NOT(5,0,0) && HEDLEY_HAS_WARNING("-Wcast-align")
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ _Pragma("clang diagnostic ignored \"-Wcast-align\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_
- #endif
- /* SLEEF triggers this a *lot* in their headers */
- #if HEDLEY_HAS_WARNING("-Wignored-qualifiers")
- #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"")
- #elif HEDLEY_GCC_VERSION_CHECK(4,3,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_ _Pragma("GCC diagnostic ignored \"-Wignored-qualifiers\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_IGNORED_QUALIFIERS_
- #endif
- /* GCC emits this under some circumstances when using __int128 */
- #if HEDLEY_GCC_VERSION_CHECK(4,8,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_PEDANTIC_ _Pragma("GCC diagnostic ignored \"-Wpedantic\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_PEDANTIC_
- #endif
- /* MSVC doesn't like (__assume(0), code) and will warn about code being
- * unreachable, but we want it there because not all compilers
- * understand the unreachable macro and will complain if it is missing.
- * I'm planning on adding a new macro to Hedley to handle this a bit
- * more elegantly, but until then... */
- #if defined(HEDLEY_MSVC_VERSION)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_ __pragma(warning(disable:4702))
- #elif defined(__clang__)
- #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_ HEDLEY_PRAGMA(clang diagnostic ignored "-Wunreachable-code")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_
- #endif
- /* This is a false positive from GCC in a few places. */
- #if HEDLEY_GCC_VERSION_CHECK(4,7,0)
- #define SIMDE_DIAGNOSTIC_DISABLE_MAYBE_UNINITIAZILED_ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
- #else
- #define SIMDE_DIAGNOSTIC_DISABLE_MAYBE_UNINITIAZILED_
- #endif
- #if defined(SIMDE_ENABLE_NATIVE_ALIASES)
- #define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_ \
- SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_MACRO_
- #else
- #define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_
- #endif
- /* Some native functions on E2K with instruction set < v6 are declared
- * as deprecated due to inefficiency. Still they are more efficient
- * than SIMDe implementation. So we're using them, and switching off
- * these deprecation warnings. */
- #if defined(HEDLEY_MCST_LCC_VERSION)
- # define SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS _Pragma("diag_suppress 1215,1444")
- # define SIMDE_LCC_REVERT_DEPRECATED_WARNINGS _Pragma("diag_default 1215,1444")
- #else
- # define SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
- # define SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
- #endif
- #define SIMDE_DISABLE_UNWANTED_DIAGNOSTICS \
- HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION \
- SIMDE_DISABLE_UNWANTED_DIAGNOSTICS_NATIVE_ALIASES_ \
- SIMDE_DIAGNOSTIC_DISABLE_PSABI_ \
- SIMDE_DIAGNOSTIC_DISABLE_NO_EMMS_INSTRUCTION_ \
- SIMDE_DIAGNOSTIC_DISABLE_SIMD_PRAGMA_DEPRECATED_ \
- SIMDE_DIAGNOSTIC_DISABLE_CONDITIONAL_UNINITIALIZED_ \
- SIMDE_DIAGNOSTIC_DISABLE_DECLARATION_AFTER_STATEMENT_ \
- SIMDE_DIAGNOSTIC_DISABLE_FLOAT_EQUAL_ \
- SIMDE_DIAGNOSTIC_DISABLE_NON_CONSTANT_AGGREGATE_INITIALIZER_ \
- SIMDE_DIAGNOSTIC_DISABLE_EXTRA_SEMI_ \
- SIMDE_DIAGNOSTIC_DISABLE_VLA_ \
- SIMDE_DIAGNOSTIC_DISABLE_USED_BUT_MARKED_UNUSED_ \
- SIMDE_DIAGNOSTIC_DISABLE_PASS_FAILED_ \
- SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_ \
- SIMDE_DIAGNOSTIC_DISABLE_CPP11_LONG_LONG_ \
- SIMDE_DIAGNOSTIC_DISABLE_BUGGY_UNUSED_BUT_SET_VARIBALE_ \
- SIMDE_DIAGNOSTIC_DISABLE_BUGGY_CASTS_ \
- SIMDE_DIAGNOSTIC_DISABLE_BUGGY_VECTOR_CONVERSION_ \
- SIMDE_DIAGNOSTIC_DISABLE_RESERVED_ID_
- #endif /* !defined(SIMDE_DIAGNOSTIC_H) */
|