| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H |
| #define SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H |
| |
| // This header is force-included when running the libc++ tests against the |
| // MSVC standard library. |
| |
| #ifndef _LIBCXX_IN_DEVCRT |
| // Silence warnings about CRT machinery. |
| # define _CRT_SECURE_NO_WARNINGS 1 |
| |
| // Avoid assertion dialogs. |
| # define _CRT_SECURE_INVALID_PARAMETER(EXPR) ::abort() |
| |
| // Declare POSIX function names. (By default, Clang -fno-ms-compatibility causes them to be omitted.) |
| # define _CRT_DECLARE_NONSTDC_NAMES 1 |
| |
| // Silence warnings about POSIX function names. |
| # define _CRT_NONSTDC_NO_WARNINGS 1 |
| |
| // Avoid Windows.h macroizing min() and max(). |
| # define NOMINMAX 1 |
| #endif // _LIBCXX_IN_DEVCRT |
| |
| #include <crtdbg.h> |
| #include <stdlib.h> |
| |
| #if defined(_LIBCPP_VERSION) |
| # error This header may not be used when targeting libc++ |
| #endif |
| |
| #ifndef _LIBCXX_IN_DEVCRT |
| struct AssertionDialogAvoider { |
| AssertionDialogAvoider() { |
| _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); |
| _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); |
| |
| _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); |
| _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); |
| } |
| }; |
| |
| const AssertionDialogAvoider assertion_dialog_avoider{}; |
| #endif // _LIBCXX_IN_DEVCRT |
| |
| // MSVC frontend only configurations |
| #if !defined(__clang__) |
| // Simulate feature-test macros. |
| # define __has_feature(X) _MSVC_HAS_FEATURE_##X |
| # define _MSVC_HAS_FEATURE_cxx_exceptions 1 |
| # define _MSVC_HAS_FEATURE_cxx_rtti 1 |
| # define _MSVC_HAS_FEATURE_address_sanitizer 0 |
| # define _MSVC_HAS_FEATURE_hwaddress_sanitizer 0 |
| # define _MSVC_HAS_FEATURE_memory_sanitizer 0 |
| # define _MSVC_HAS_FEATURE_thread_sanitizer 0 |
| |
| # define __has_attribute(X) _MSVC_HAS_ATTRIBUTE_##X |
| # define _MSVC_HAS_ATTRIBUTE_vector_size 0 |
| |
| // Silence compiler warnings. |
| # pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored |
| # pragma warning(disable : 4324) // structure was padded due to alignment specifier |
| # pragma warning(disable : 4521) // multiple copy constructors specified |
| # pragma warning(disable : 4702) // unreachable code |
| # pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations. |
| #endif // !defined(__clang__) |
| |
| #ifndef _LIBCXX_IN_DEVCRT |
| // atomic_is_lock_free.pass.cpp needs this VS 2015 Update 2 fix. |
| # define _ENABLE_ATOMIC_ALIGNMENT_FIX |
| |
| // Restore features that are removed in C++20. |
| # define _HAS_FEATURES_REMOVED_IN_CXX20 1 |
| |
| // Silence warnings about the unspecified complex<non-floating-point> |
| # define _SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING |
| |
| // Silence warnings about features that are deprecated in non-default language modes. |
| # define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS |
| # define _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS |
| # define _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS |
| #endif // _LIBCXX_IN_DEVCRT |
| |
| #include <version> |
| |
| #if _HAS_CXX23 |
| # define TEST_STD_VER 99 |
| #elif _HAS_CXX20 |
| # define TEST_STD_VER 20 |
| #elif _HAS_CXX17 |
| # define TEST_STD_VER 17 |
| #else |
| # define TEST_STD_VER 14 |
| #endif |
| |
| #define TEST_SHORT_WCHAR |
| #define TEST_ABI_MICROSOFT |
| |
| #define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST |
| |
| #endif // SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H |