|  | // -*- C++ -*- | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // 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_SET_WINDOWS_CRT_REPORT_MODE_H | 
|  | #define SUPPORT_SET_WINDOWS_CRT_REPORT_MODE_H | 
|  |  | 
|  | // A few tests are built in C mode or in C++03 mode. The initialization | 
|  | // of init_crt_anchor is a C++ feature, and <crtdbg.h> ends up including | 
|  | // MSVC header code which breaks in C++03 mode. Therefore, only expand | 
|  | // the body of this header when included in C++ >= 11 mode. As this file | 
|  | // is included in every single translation unit, we're intentionally not | 
|  | // including test_macros.h (for TEST_STD_VER) but try to keep it to the | 
|  | // bare minimum. | 
|  | #if defined(__cplusplus) && __cplusplus > 199711L | 
|  | #ifndef _DEBUG | 
|  | #error _DEBUG must be defined when using this header | 
|  | #endif | 
|  |  | 
|  | #ifndef _WIN32 | 
|  | #error This header can only be used when targeting Windows | 
|  | #endif | 
|  |  | 
|  | #include <crtdbg.h> | 
|  |  | 
|  | // On Windows in debug builds the default assertion handler opens a new dialog | 
|  | // window which must be dismissed manually by the user. This function overrides | 
|  | // that setting and instead changes the assertion handler to log to stderr | 
|  | // instead. | 
|  | inline int init_crt_report_mode() { | 
|  | _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); | 
|  | _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); | 
|  | _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); | 
|  | _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); | 
|  | _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); | 
|  | _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | static int init_crt_anchor = init_crt_report_mode(); | 
|  | #endif // defined(__cplusplus) && __cplusplus > 199711L | 
|  |  | 
|  | #endif // SUPPORT_SET_WINDOWS_CRT_REPORT_MODE_H |