1cc89063bSNico Weber //===----------------------------------------------------------------------===// 2cc89063bSNico Weber // 3cc89063bSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4cc89063bSNico Weber // See https://llvm.org/LICENSE.txt for license information. 5cc89063bSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6cc89063bSNico Weber // 7cc89063bSNico Weber //===----------------------------------------------------------------------===// 8cc89063bSNico Weber 9cc89063bSNico Weber #ifndef SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H 10cc89063bSNico Weber #define SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H 11cc89063bSNico Weber 12cc89063bSNico Weber // This header is force-included when running the libc++ tests against the 13cc89063bSNico Weber // MSVC standard library. 14cc89063bSNico Weber 15cc89063bSNico Weber #ifndef _LIBCXX_IN_DEVCRT 16cc89063bSNico Weber // Silence warnings about CRT machinery. 17b30e4292SMartin Storsjö # define _CRT_SECURE_NO_WARNINGS 1 18cc89063bSNico Weber 19cc89063bSNico Weber // Avoid assertion dialogs. 20cc89063bSNico Weber # define _CRT_SECURE_INVALID_PARAMETER(EXPR) ::abort() 213aee4a96SStephan T. Lavavej 223aee4a96SStephan T. Lavavej // Declare POSIX function names. (By default, Clang -fno-ms-compatibility causes them to be omitted.) 233aee4a96SStephan T. Lavavej # define _CRT_DECLARE_NONSTDC_NAMES 1 243aee4a96SStephan T. Lavavej 253aee4a96SStephan T. Lavavej // Silence warnings about POSIX function names. 263aee4a96SStephan T. Lavavej # define _CRT_NONSTDC_NO_WARNINGS 1 273aee4a96SStephan T. Lavavej 283aee4a96SStephan T. Lavavej // Avoid Windows.h macroizing min() and max(). 293aee4a96SStephan T. Lavavej # define NOMINMAX 1 30cc89063bSNico Weber #endif // _LIBCXX_IN_DEVCRT 31cc89063bSNico Weber 32cc89063bSNico Weber #include <crtdbg.h> 33cc89063bSNico Weber #include <stdlib.h> 34cc89063bSNico Weber 35cc89063bSNico Weber #if defined(_LIBCPP_VERSION) 36cc89063bSNico Weber # error This header may not be used when targeting libc++ 37cc89063bSNico Weber #endif 38cc89063bSNico Weber 39cc89063bSNico Weber #ifndef _LIBCXX_IN_DEVCRT 40cc89063bSNico Weber struct AssertionDialogAvoider { AssertionDialogAvoiderAssertionDialogAvoider41cc89063bSNico Weber AssertionDialogAvoider() { 42cc89063bSNico Weber _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 43cc89063bSNico Weber _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 44cc89063bSNico Weber 45cc89063bSNico Weber _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); 46cc89063bSNico Weber _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); 47cc89063bSNico Weber } 48cc89063bSNico Weber }; 49cc89063bSNico Weber 50cc89063bSNico Weber const AssertionDialogAvoider assertion_dialog_avoider{}; 51cc89063bSNico Weber #endif // _LIBCXX_IN_DEVCRT 52cc89063bSNico Weber 53cc89063bSNico Weber // MSVC frontend only configurations 54cc89063bSNico Weber #if !defined(__clang__) 55cc89063bSNico Weber // Simulate feature-test macros. 56cc89063bSNico Weber # define __has_feature(X) _MSVC_HAS_FEATURE_##X 57cc89063bSNico Weber # define _MSVC_HAS_FEATURE_cxx_exceptions 1 58cc89063bSNico Weber # define _MSVC_HAS_FEATURE_cxx_rtti 1 59cc89063bSNico Weber # define _MSVC_HAS_FEATURE_address_sanitizer 0 603aee4a96SStephan T. Lavavej # define _MSVC_HAS_FEATURE_hwaddress_sanitizer 0 61cc89063bSNico Weber # define _MSVC_HAS_FEATURE_memory_sanitizer 0 62cc89063bSNico Weber # define _MSVC_HAS_FEATURE_thread_sanitizer 0 63cc89063bSNico Weber 64cc89063bSNico Weber # define __has_attribute(X) _MSVC_HAS_ATTRIBUTE_##X 65cc89063bSNico Weber # define _MSVC_HAS_ATTRIBUTE_vector_size 0 66cc89063bSNico Weber 67cc89063bSNico Weber // Silence compiler warnings. 68cc89063bSNico Weber # pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored 69cc89063bSNico Weber # pragma warning(disable : 4324) // structure was padded due to alignment specifier 70cc89063bSNico Weber # pragma warning(disable : 4702) // unreachable code 71cc89063bSNico Weber # pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations. 72cc89063bSNico Weber #endif // !defined(__clang__) 73cc89063bSNico Weber 74cc89063bSNico Weber #ifndef _LIBCXX_IN_DEVCRT 75cc89063bSNico Weber // atomic_is_lock_free.pass.cpp needs this VS 2015 Update 2 fix. 76cc89063bSNico Weber # define _ENABLE_ATOMIC_ALIGNMENT_FIX 77cc89063bSNico Weber 785b14abf0SStephan T. Lavavej // Restore features that are removed in C++20. 795b14abf0SStephan T. Lavavej # define _HAS_FEATURES_REMOVED_IN_CXX20 1 805b14abf0SStephan T. Lavavej 819aaba9d9SCasey Carter // Silence warnings about the unspecified complex<non-floating-point> 829aaba9d9SCasey Carter # define _SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING 839aaba9d9SCasey Carter 84eb595066SCasey Carter // Silence warnings about features that are deprecated in non-default language modes. 85cc89063bSNico Weber # define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 86cc89063bSNico Weber # define _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS 87eb595066SCasey Carter # define _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS 88cc89063bSNico Weber #endif // _LIBCXX_IN_DEVCRT 89cc89063bSNico Weber 906f0768f6SCasey Carter #include <version> 91cc89063bSNico Weber 92eb595066SCasey Carter #if _HAS_CXX23 93*2ba08386SStephan T. Lavavej # define TEST_STD_VER 23 94eb595066SCasey Carter #elif _HAS_CXX20 95eb595066SCasey Carter # define TEST_STD_VER 20 96cc89063bSNico Weber #elif _HAS_CXX17 97cc89063bSNico Weber # define TEST_STD_VER 17 98eb595066SCasey Carter #else 99cc89063bSNico Weber # define TEST_STD_VER 14 100cc89063bSNico Weber #endif 101cc89063bSNico Weber 10269a10e0eSStephan T. Lavavej #define TEST_SHORT_WCHAR 103e0c73456SS. B. Tam #define TEST_ABI_MICROSOFT 10469a10e0eSStephan T. Lavavej 105cc89063bSNico Weber #define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST 10636091109SCasey Carter 107cc89063bSNico Weber #endif // SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_H 108