mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-22 07:51:39 +08:00

libcxx's tests use various C Standard Library functions that have been marked by MSVC's CRT as deprecated by Microsoft (not by ISO). libcxx's usage is cromulent (just checking with decltype to see if the functions are being dragged in by various headers as required by the Standard), so defining _CRT_SECURE_NO_WARNINGS will silence the warnings in a targeted manner. This needs to be defined before including any CRT headers. Also, make this file prettier. Fixes D29138. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294157 91177308-0d34-0410-b5e6-96231b3b80d8
79 lines
2.7 KiB
C++
79 lines
2.7 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_HPP
|
|
#define SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_HPP
|
|
|
|
// This header is force-included when running the libc++ tests against the
|
|
// MSVC standard library.
|
|
|
|
// Silence warnings about CRT machinery.
|
|
#define _CRT_SECURE_NO_WARNINGS
|
|
|
|
// Avoid assertion dialogs.
|
|
#define _CRT_SECURE_INVALID_PARAMETER(EXPR) ::abort()
|
|
|
|
#include <crtdbg.h>
|
|
#include <stdlib.h>
|
|
|
|
#if defined(_LIBCPP_VERSION)
|
|
#error This header may not be used when targeting libc++
|
|
#endif
|
|
|
|
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{};
|
|
|
|
// MSVC frontend only configurations
|
|
#if !defined(__clang__)
|
|
#define TEST_STD_VER 17
|
|
|
|
// 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_memory_sanitizer 0
|
|
#define _MSVC_HAS_FEATURE_thread_sanitizer 0
|
|
|
|
// Silence compiler warnings.
|
|
#pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored
|
|
#pragma warning(disable: 4521) // multiple copy constructors specified
|
|
#pragma warning(disable: 4702) // unreachable code
|
|
#pragma warning(disable: 6294) // Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed.
|
|
#pragma warning(disable: 28251) // Inconsistent annotation for 'new': this instance has no annotations.
|
|
#endif // !defined(__clang__)
|
|
|
|
// MSVC doesn't have __int128_t.
|
|
#define _LIBCPP_HAS_NO_INT128
|
|
|
|
// MSVC has quick_exit() and at_quick_exit().
|
|
#define _LIBCPP_HAS_QUICK_EXIT
|
|
|
|
// atomic_is_lock_free.pass.cpp needs this VS 2015 Update 2 fix.
|
|
#define _ENABLE_ATOMIC_ALIGNMENT_FIX
|
|
|
|
// Enable features that /std:c++latest removes by default.
|
|
#define _HAS_AUTO_PTR_ETC 1
|
|
#define _HAS_FUNCTION_ASSIGN 1
|
|
#define _HAS_OLD_IOSTREAMS_MEMBERS 1
|
|
|
|
// Silence warnings about raw pointers and other unchecked iterators.
|
|
#define _SCL_SECURE_NO_WARNINGS
|
|
|
|
#endif // SUPPORT_MSVC_STDLIB_FORCE_INCLUDE_HPP
|