Massively improve the performance of <system_error> and remove constexpr workarounds. (#529)

* Removes VSO-406237 "C1XX does not do constant initialization where the standard requires" workarounds.
* Introduce `_Immortalize_memcpy_image` which avoids the need for synchronization when constructing the error categories. See the big comment block for explanation of how we got here. For compilers which let us declare instances with the empty virtual destructor as constexpr variables (currently only clang in C++20 mode), we can avoid the workaround.
* Turn on `/Zc:threadSafeInit-` and warning 4640 in most tests to ensure we aren't emitting thread-local initializers in `<system_error>`.
* Move `_Immortalizer` and friends to the one remaining caller in the `exception_ptr` implementation.
* Remove `_Generic_error_category` from the base class hierarchies of error categories to workaround DevCom-928781.
This commit is contained in:
Billy O'Neal 2020-02-27 19:03:58 -08:00 коммит произвёл GitHub
Родитель b190cb5586
Коммит d4ee5c3fb4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
35 изменённых файлов: 341 добавлений и 214 удалений

@ -1 +1 @@
Subproject commit 47282b1b4bf3e18d2e2166b87159115ed520a2aa
Subproject commit e48849a2404128175df25168f961a83d6c0a901e

Просмотреть файл

@ -152,12 +152,9 @@ private:
error_code _Mycode; // the stored error code
};
// CLASS _Future_error_category
class _Future_error_category : public _Generic_error_category { // categorize a future error
class _Future_error_category2 : public error_category { // categorize a future error
public:
_Future_error_category() {
_Addr = _Future_addr;
}
constexpr _Future_error_category2() noexcept : error_category(_Future_addr) {}
virtual const char* name() const noexcept override {
return "future";
@ -169,12 +166,12 @@ public:
return _Name;
}
return _Generic_error_category::message(_Errcode);
return _Syserror_map(_Errcode);
}
};
_NODISCARD inline const error_category& future_category() noexcept {
return _Immortalize<_Future_error_category>();
return _Immortalize_memcpy_image<_Future_error_category2>();
}
// STRUCT TEMPLATE _State_deleter

Просмотреть файл

@ -1011,7 +1011,7 @@ public:
using weak_type = weak_ptr<_Ty>;
#endif // _HAS_CXX17
constexpr shared_ptr() noexcept {} // construct empty shared_ptr
constexpr shared_ptr() noexcept = default;
constexpr shared_ptr(nullptr_t) noexcept {} // construct empty shared_ptr

Просмотреть файл

@ -6,7 +6,7 @@
#pragma once
#ifndef _SYSTEM_ERROR_
#define _SYSTEM_ERROR_
#include <yvals_core.h>
#include <yvals.h>
#if _STL_COMPILER_PREPROCESSOR
#include <__msvc_system_error_abi.hpp>
#include <cerrno>
@ -14,6 +14,9 @@
#include <stdexcept>
#include <xcall_once.h>
#include <xerrc.h>
#ifndef _M_CEE_PURE
#include <atomic>
#endif
#pragma pack(push, _CRT_PACKING)
#pragma warning(push, _STL_WARNING_LEVEL)
@ -68,7 +71,10 @@ public:
_Addr = reinterpret_cast<uintptr_t>(this);
}
virtual ~error_category() noexcept {}
#ifdef __cpp_constexpr_dynamic_alloc
constexpr
#endif
virtual ~error_category() noexcept = default;
_NODISCARD virtual const char* name() const noexcept = 0;
@ -98,7 +104,9 @@ public:
protected:
uintptr_t _Addr;
enum : uintptr_t { // imaginary addresses for Standard error_category objects
constexpr explicit error_category(const uintptr_t _Addr_) noexcept : _Addr(_Addr_) {}
enum : uintptr_t { // symbolic addresses for Standard error_category objects
_Future_addr = 1,
_Generic_addr = 3,
_Iostream_addr = 5,
@ -449,12 +457,9 @@ struct _System_error_message {
}
};
// CLASS _Generic_error_category
class _Generic_error_category : public error_category { // categorize a generic error
public:
_Generic_error_category() noexcept {
_Addr = _Generic_addr;
}
constexpr _Generic_error_category() noexcept : error_category(_Generic_addr) {}
_NODISCARD virtual const char* name() const noexcept override {
return "generic";
@ -465,12 +470,9 @@ public:
}
};
// CLASS _Iostream_error_category
class _Iostream_error_category : public _Generic_error_category { // categorize an iostream error
class _Iostream_error_category2 : public error_category { // categorize an iostream error
public:
_Iostream_error_category() noexcept {
_Addr = _Iostream_addr;
}
constexpr _Iostream_error_category2() noexcept : error_category(_Iostream_addr) {}
_NODISCARD virtual const char* name() const noexcept override {
return "iostream";
@ -482,17 +484,14 @@ public:
constexpr size_t _Iostream_error_length = sizeof(_Iostream_error) - 1; // TRANSITION, DevCom-906503
return string(_Iostream_error, _Iostream_error_length);
} else {
return _Generic_error_category::message(_Errcode);
return _Syserror_map(_Errcode);
}
}
};
// CLASS _System_error_category
class _System_error_category : public error_category { // categorize an operating system error
public:
_System_error_category() noexcept {
_Addr = _System_addr;
}
constexpr _System_error_category() noexcept : error_category(_System_addr) {}
_NODISCARD virtual const char* name() const noexcept override {
return "system";
@ -520,16 +519,81 @@ public:
}
};
//
// TRANSITION, VSO-1043450
// _Immortalize_memcpy_image is used to provide a nonstandard guarantee.
// Specifically, we want the error category objects returned from things like std::system_category() to always
// be available, even during DLL unload (otherwise, <system_error> would be a huge regression vs. legacy error codes).
// Moreover, we need to be very conservative in the runtime support we request. Thus, we have these constraints:
//
// * can't use magic statics in standard modes, because that would inject a .TLS section into all binaries using
// <system_error> and would likely put borderline programs over the TLS slot count limit, and would destroy the
// variable during DLL unload
// * can't declare the error_category as an ordinary constexpr variable for most compilers, because error_category
// has a virtual destructor (TRANSITION, __cpp_constexpr_dynamic_alloc)
// * can't declare the error_category as an ordinary non-constexpr variable even with a constexpr constructor, because
// the compiler will emit code to destroy it which invalidates its use in these DLL shutdown scenarios
//
// As a result, we use a workaround: We create an atomic<uintptr_t> array to store the error_category instance, test
// if the first atomic is nonzero (acquire), and if so, we know we have formed the instance and can return a
// reinterpreted pointer to that storage. If the first atomic is zero, we write all except the first atomic (relaxed),
// then write the first one as a store-release. (The non-first values are transferred to other threads in the
// release sequence).
//
// Acknowledged undefined and implementation-defined behavior happening here:
// * There is a data race when filling in the values other than the first atomic; this is OK on all hardware we target
// because the racing threads are all writing identical values that never change afterwards.
// * We are reaching into the layout of atomic<uintptr_t>[N] and assuming we can reinterpret that as some other type.
// * We are assuming that virtual functions are implemented with a vfptr located as the first member of an object.
// (there are probably others)
//
// Inspecting the resulting assembly of any callers of _Immortalize_memcpy_image is recommended.
//
#if defined(_M_CEE_PURE)
// /clr:pure doesn't ever do constant initialization, so rely on the CLR and magic statics
template <class _Ty>
_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {
/* MAGIC */ static _Immortalizer_impl<_Ty> _Static;
return _Static._Storage;
}
#elif defined(__cpp_constexpr_dynamic_alloc)
template <class _Ty>
_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {
constexpr _Ty _Static;
return _Static._Storage;
}
#else // choose immortalize strategy
template <class _Ty>
_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {
// return reference to a memcpy'd default-initialized _Ty
// pre: A default-initialized _Ty sets the first pointer-sized field to nonzero
constexpr size_t _Pointer_count = sizeof(_Ty) / sizeof(uintptr_t);
static atomic<uintptr_t> _Storage[_Pointer_count];
static_assert(sizeof(_Storage) == sizeof(_Ty), "Bad storage size");
static_assert(alignof(decltype(_Storage)) >= alignof(_Ty), "Bad alignment assumptions");
if (_Storage[0].load(memory_order_acquire) != 0) {
return reinterpret_cast<_Ty&>(_Storage);
}
const _Ty _Target;
const auto _Target_iter = reinterpret_cast<const uintptr_t*>(_STD addressof(_Target));
_CSTD memcpy(_Storage + 1, _Target_iter + 1, sizeof(_Ty) - sizeof(uintptr_t));
_Storage[0].store(_Target_iter[0], memory_order_release);
return reinterpret_cast<_Ty&>(_Storage);
}
#endif // choose immortalize strategy
_NODISCARD inline const error_category& generic_category() noexcept {
return _Immortalize<_Generic_error_category>();
return _Immortalize_memcpy_image<_Generic_error_category>();
}
_NODISCARD inline const error_category& iostream_category() noexcept {
return _Immortalize<_Iostream_error_category>();
return _Immortalize_memcpy_image<_Iostream_error_category2>();
}
_NODISCARD inline const error_category& system_category() noexcept {
return _Immortalize<_System_error_category>();
return _Immortalize_memcpy_image<_System_error_category>();
}
_STD_END
#pragma pop_macro("new")

Просмотреть файл

@ -32,51 +32,17 @@ using _Execute_once_fp_t = int(__stdcall*)(void*, void*, void**);
_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Execute_once(
once_flag& _Flag, _Execute_once_fp_t _Callback, void* _Pv) noexcept;
#ifdef _M_CEE_PURE
template <class _Ty>
struct _Immortalizer { // constructs _Ty, never destroys
_Immortalizer() { // construct _Ty inside _Storage
::new (static_cast<void*>(&_Storage)) _Ty();
union _Immortalizer_impl { // constructs _Ty, never destroys
constexpr _Immortalizer_impl() noexcept : _Storage{} {}
_Immortalizer_impl(const _Immortalizer_impl&) = delete;
_Immortalizer_impl& operator=(const _Immortalizer_impl&) = delete;
~_Immortalizer_impl() {
// do nothing
}
_Immortalizer(const _Immortalizer&) = delete;
_Immortalizer& operator=(const _Immortalizer&) = delete;
aligned_union_t<1, _Ty> _Storage;
_Ty _Storage;
};
#pragma warning(push)
#pragma warning(disable : 4640) // construction of local static object is not thread-safe (/Wall)
template <class _Ty>
_Ty& _Immortalize() { // return a reference to an object that will live forever
/* MAGIC */ static _Immortalizer<_Ty> _Static;
return reinterpret_cast<_Ty&>(_Static._Storage);
}
#pragma warning(pop)
#else // ^^^ _M_CEE_PURE ^^^ // vvv !_M_CEE_PURE vvv
template <class _Ty>
int __stdcall _Immortalize_impl(void*, void* _Storage_ptr, void**) noexcept {
// adapt True Placement New to _Execute_once
::new (_Storage_ptr) _Ty();
return 1;
}
template <class _Ty>
_Ty& _Immortalize() { // return a reference to an object that will live forever
static_assert(sizeof(void*) == sizeof(once_flag), "TRANSITION, VSO-406237");
static_assert(alignof(void*) == alignof(once_flag), "TRANSITION, VSO-406237");
static void* _Flag = nullptr;
static aligned_union_t<1, _Ty> _Storage;
if (_Execute_once(reinterpret_cast<once_flag&>(_Flag), _Immortalize_impl<_Ty>, &_Storage) == 0) {
// _Execute_once should never fail if the callback never fails
_STD terminate();
}
return reinterpret_cast<_Ty&>(_Storage);
}
#endif // _M_CEE_PURE
_STD_END
#pragma pop_macro("new")

Просмотреть файл

@ -37,6 +37,33 @@ extern "C" _CRTIMP2 void* __cdecl __AdjustPointer(void*, const PMD&); // defined
using namespace std;
namespace {
#ifdef _M_CEE_PURE
template <class _Ty>
_Ty& _Immortalize() { // return a reference to an object that will live forever
/* MAGIC */ static _Immortalizer_impl<_Ty> _Static;
return reinterpret_cast<_Ty&>(_Static._Storage);
}
#else // ^^^ _M_CEE_PURE ^^^ // vvv !_M_CEE_PURE vvv
template <class _Ty>
int __stdcall _Immortalize_impl(void*, void* _Storage_ptr, void**) noexcept {
// adapt True Placement New to _Execute_once
::new (_Storage_ptr) _Ty();
return 1;
}
template <class _Ty>
_Ty& _Immortalize() { // return a reference to an object that will live forever
static once_flag _Flag;
alignas(_Ty) static unsigned char _Storage[sizeof(_Ty)];
if (_Execute_once(_Flag, _Immortalize_impl<_Ty>, &_Storage) == 0) {
// _Execute_once should never fail if the callback never fails
_STD terminate();
}
return reinterpret_cast<_Ty&>(_Storage);
}
#endif // _M_CEE_PURE
void _PopulateCppExceptionRecord(
_EXCEPTION_RECORD& _Record, const void* const _PExcept, ThrowInfo* _PThrow) noexcept {
_Record.ExceptionCode = EH_EXCEPTION_NUMBER;

Просмотреть файл

@ -11,11 +11,13 @@ namespace pmr {
static memory_resource* _Default_resource = nullptr;
extern "C" _CRT_SATELLITE_1 _Aligned_new_delete_resource_impl* __cdecl _Aligned_new_delete_resource() noexcept {
return &_Immortalize<_Aligned_new_delete_resource_impl>();
return &const_cast<_Aligned_new_delete_resource_impl&>(
_Immortalize_memcpy_image<_Aligned_new_delete_resource_impl>());
}
extern "C" _CRT_SATELLITE_1 _Unaligned_new_delete_resource_impl* __cdecl _Unaligned_new_delete_resource() noexcept {
return &_Immortalize<_Unaligned_new_delete_resource_impl>();
return &const_cast<_Unaligned_new_delete_resource_impl&>(
_Immortalize_memcpy_image<_Unaligned_new_delete_resource_impl>());
}
extern "C" _CRT_SATELLITE_1 memory_resource* __cdecl _Aligned_get_default_resource() noexcept {
@ -66,7 +68,7 @@ namespace pmr {
}
};
return &_Immortalize<_Null_resource>();
return &const_cast<_Null_resource&>(_Immortalize_memcpy_image<_Null_resource>());
}
} // namespace pmr

Просмотреть файл

@ -12,6 +12,8 @@ const size_t max_parallel_test_case_n = 1000;
const size_t max_parallel_test_case_n = std::max(4u, std::thread::hardware_concurrency()) + 1;
#endif // EXHAUSTIVE
#pragma warning(push)
#pragma warning(disable : 4640) // 'cases': construction of local static object is not thread-safe
template <typename Fx, typename... Args>
void parallel_test_case(Fx fn, Args&... vals) {
// call fn with "interesting" test case sizes and additional parameters
@ -25,3 +27,4 @@ void parallel_test_case(Fx fn, Args&... vals) {
fn(testSize, vals...);
}
}
#pragma warning(pop)

Просмотреть файл

@ -90,8 +90,8 @@ public:
}
void deallocate(T* const p, size_t) const {
unsigned char* const x = static_cast<unsigned char*>(static_cast<void*>(p)) - 128;
static const auto equal_to_cc = [](const unsigned char c) { return c == 0xCC; };
unsigned char* const x = static_cast<unsigned char*>(static_cast<void*>(p)) - 128;
const auto equal_to_cc = [](const unsigned char c) { return c == 0xCC; };
assert(all_of(x, x + 128, equal_to_cc));
const auto afterT = x + 128 + sizeof(T);
assert(all_of(afterT, afterT + 128, equal_to_cc));

Просмотреть файл

@ -51,7 +51,7 @@ STATIC_ASSERT(il.size() == 0);
STATIC_ASSERT(il.begin() == il.end());
STATIC_ASSERT(begin(il) == end(il));
// TRANSITION:
// TRANSITION,
// constexpr error_category() noexcept;
constexpr int i = 1729;
@ -816,7 +816,7 @@ constexpr adopt_lock_t adopt_lock2 = adopt_lock;
constexpr once_flag once{};
// TRANSITION:
// TRANSITION,
// constexpr mutex() noexcept;
#endif // _M_CEE

Просмотреть файл

@ -7,6 +7,8 @@
RUNALL_INCLUDE ..\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /DCONSTEXPR_NOTHROW"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /DCONSTEXPR_NOTHROW"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /DCONSTEXPR_NOTHROW"

Просмотреть файл

@ -72,6 +72,8 @@ struct test_info {
using expected_table_t = vector<test_info>;
#pragma warning(push)
#pragma warning(disable : 4640) // 'variable': construction of local static object is not thread-safe
#if _ITERATOR_DEBUG_LEVEL == 0
const expected_table_t& get_expected_moves_table() {
@ -126,6 +128,7 @@ const expected_table_t& get_expected_copies_table() {
}
#endif // _ITERATOR_DEBUG_LEVEL == 0
#pragma warning(pop)
int query_expected_table(const expected_table_t& table, const string& type_name, const string& test_name) {
auto exact_match = find_if(begin(table), end(table),

Просмотреть файл

@ -1,7 +1,40 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
RUNALL_INCLUDE ..\usual_matrix.lst
# The following lines are intended to match usual_matrix.lst but without /w14640 /Zc:threadSafeInit-
RUNALL_INCLUDE ..\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive-"
PM_CL="/clr /MD /std:c++17"
PM_CL="/clr /MDd /std:c++17"
PM_CL="/clr:pure /MD /std:c++14"
PM_CL="/clr:pure /MDd /std:c++14"
PM_CL="/BE /c /EHsc /MD /std:c++14"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MD /std:c++14"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict"
# The following lines are extras not present in usual_matrix.lst
PM_CL="/MT /std:c++latest /EHsc /Zc:alignedNew- /DTEST_DISABLED_ALIGNED_NEW"
PM_CL="/MT /std:c++latest /EHs- /DTEST_DISABLED_EXCEPTIONS"
PM_CL="/MT /std:c++latest /EHsc /Zc:noexceptTypes- /DTEST_DISABLED_NOEXCEPT_FUNCTION_TYPE"

Просмотреть файл

@ -2,9 +2,9 @@
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
RUNALL_INCLUDE .\usual_matrix.lst
PM_CL="/Gr /EHsc /MT /std:c++latest"
PM_CL="/Gr /EHsc /MTd /std:c++latest"
PM_CL="/Gv /EHsc /MT /std:c++latest"
PM_CL="/Gv /EHsc /MTd /std:c++latest"
PM_CL="/Gz /EHsc /MT /std:c++latest"
PM_CL="/Gz /EHsc /MTd /std:c++latest"
PM_CL="/Gr /EHsc /MT /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/Gr /EHsc /MTd /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/Gv /EHsc /MT /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/Gv /EHsc /MTd /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/Gz /EHsc /MT /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/Gz /EHsc /MTd /std:c++latest /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,5 +3,7 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/clr /MD /std:c++17"
PM_CL="/clr /MDd /std:c++17"

Просмотреть файл

@ -3,9 +3,11 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/w14640 /Zc:threadSafeInit- /EHsc /std:c++latest"
RUNALL_CROSSLIST
PM_CL="/MT /D_ITERATOR_DEBUG_LEVEL=0 /permissive-"
PM_CL="/MT /D_ITERATOR_DEBUG_LEVEL=0 /Zc:char8_t-"
PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=0 /permissive-"
PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2"
PM_CL="/MT /D_ITERATOR_DEBUG_LEVEL=0 /analyze:only"
PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /analyze:only"

Просмотреть файл

@ -3,14 +3,16 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHa /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHa /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHa /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHa /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHa /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/EHa /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except"
PM_CL="/EHa /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHa /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHa /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/EHa /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/EHa /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await"
PM_CL="/w14640 /Zc:threadSafeInit- /EHa"
RUNALL_CROSSLIST
PM_CL="/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except"
PM_CL="/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await"

Просмотреть файл

@ -4,4 +4,4 @@
# This is for tests that take a long time to execute, so run only one configuration.
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MT /O2 /GL /std:c++latest /analyze"
PM_CL="/EHsc /MT /O2 /GL /std:c++latest /analyze /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"

Просмотреть файл

@ -3,7 +3,7 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/DMEOW_HEADER=algorithm"
PM_CL="/DMEOW_HEADER=any"

Просмотреть файл

@ -3,37 +3,37 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /await"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive-"
PM_CL="/clr /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/clr /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++17"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++17"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17"
PM_CL="/clr /MD /J /std:c++17"
PM_CL="/clr /MDd /J /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /J /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /J /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr:pure /MD /std:c++14"
PM_CL="/clr:pure /MDd /std:c++14"
PM_CL="/BE /c /EHsc /MD /std:c++14"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MD /std:c++14"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict"
PM_CL="/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"

Просмотреть файл

@ -3,7 +3,7 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MTd /std:c++latest /analyze"
PM_CL="/EHsc /MTd /std:c++latest /analyze /w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/GR"
PM_CL="/GR-"

Просмотреть файл

@ -5,6 +5,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"

Просмотреть файл

@ -1,34 +1,38 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
# When updating this list, also remember to update VSO_0157762_feature_test_macros\env.lst
#
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive-"
PM_CL="/clr /MD /std:c++17"
PM_CL="/clr /MDd /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr:pure /MD /std:c++14"
PM_CL="/clr:pure /MDd /std:c++14"
PM_CL="/BE /c /EHsc /MD /std:c++14"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MD /std:c++14"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict"
PM_CL="/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,30 +3,30 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/clr /MD /std:c++17"
PM_CL="/clr /MDd /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /await /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr:pure /MD /std:c++14"
PM_CL="/clr:pure /MDd /std:c++14"
PM_CL="/BE /c /EHsc /MD /std:c++14"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MD /std:c++14"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MTd /std:c++latest"
PM_CL="/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-delayed-template-parsing /EHsc /MTd /std:c++latest /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,30 +3,30 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive-"
PM_CL="/clr /MD /std:c++17"
PM_CL="/clr /MDd /std:c++17"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /D_HAS_IF_CONSTEXPR=0 /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /w14640 /Zc:threadSafeInit-"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/Za /EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MD /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_CL="/clr:pure /MD /std:c++14"
PM_CL="/clr:pure /MDd /std:c++14"
PM_CL="/BE /c /EHsc /MD /std:c++14"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MD /std:c++14"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MDd /std:c++17"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MTd /std:c++latest"
PM_CL="/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-"
PM_CL="/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Xclang -Wno-deprecated-declarations -Xclang -Wno-self-assign /EHsc /MTd /std:c++latest /w14640 /Zc:threadSafeInit-"

Просмотреть файл

@ -3,6 +3,8 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/w14640 /Zc:threadSafeInit-"
RUNALL_CROSSLIST
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /D_HAS_IF_CONSTEXPR=0"
PM_CL="/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17"

Просмотреть файл

@ -3,4 +3,4 @@
RUNALL_INCLUDE .\prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze"
PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze /w14640 /Zc:threadSafeInit-"