This commit is contained in:
Stephan T. Lavavej 2022-04-15 20:21:08 -07:00 коммит произвёл GitHub
Родитель 7209f869b7
Коммит 9bf8f3f9b0
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
16 изменённых файлов: 151 добавлений и 130 удалений

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

@ -2747,6 +2747,7 @@ using atomic_unsigned_lock_free = atomic_uintptr_t;
#define ATOMIC_FLAG_INIT \
{}
struct atomic_flag { // flag with test-and-set semantics
#if _HAS_CXX20
_NODISCARD bool test(const memory_order _Order = memory_order_seq_cst) const noexcept {

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

@ -18,8 +18,6 @@ _STL_DISABLE_CLANG_WARNINGS
#pragma push_macro("new")
#undef new
#pragma warning(disable : 4127) // conditional expression is constant
_STD_BEGIN
_INLINE_VAR constexpr int _Little_first = 1;
_INLINE_VAR constexpr int _Big_first = 2;
@ -203,13 +201,20 @@ protected:
int __CLR_OR_THIS_CALL do_max_length() const noexcept override {
// return maximum length required for a conversion
return (_Mymode & (consume_header | generate_header)) != 0 ? 9 : 6;
if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {
return 9;
} else {
return 6;
}
}
int __CLR_OR_THIS_CALL do_encoding() const noexcept override {
// return length of code sequence (from codecvt)
return (_Mymode & (consume_header | generate_header)) != 0 ? -1
: 0; // -1 => state dependent, 0 => varying length
if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {
return -1; // -1 => state dependent
} else {
return 0; // 0 => varying length
}
}
};
@ -318,7 +323,12 @@ protected:
_Mid2 = _First2;
if (*_Pstate == 0) { // determine endianness once, maybe generate header
*_Pstate = (_Mymode & little_endian) != 0 ? _Little_first : _Big_first;
if constexpr ((_Mymode & little_endian) != 0) {
*_Pstate = _Little_first;
} else {
*_Pstate = _Big_first;
}
constexpr bool _Generating = (_Mymode & generate_header) != 0;
if constexpr (_Generating) {
if (_Last2 - _Mid2 < 3 * _Bytes_per_word) {
@ -408,12 +418,16 @@ protected:
int __CLR_OR_THIS_CALL do_max_length() const noexcept override {
// return maximum length required for a conversion
return (_Mymode & (consume_header | generate_header)) != 0 ? 3 * _Bytes_per_word : 6 * _Bytes_per_word;
if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {
return 3 * _Bytes_per_word;
} else {
return 6 * _Bytes_per_word;
}
}
int __CLR_OR_THIS_CALL do_encoding() const noexcept override {
// return length of code sequence (from codecvt)
if ((_Mymode & (consume_header | generate_header)) != 0) {
if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {
return -1; // -1 => state dependent
} else {
return 0; // 0 => varying length
@ -602,15 +616,17 @@ protected:
break; // not enough room, even without header
}
if (*_Pstate == 0u && (_Mymode & generate_header) != 0) { // header to put
if (_Last2 - _Mid2 < 3 + _Nput) {
break; // not enough room for header + output
}
if constexpr ((_Mymode & generate_header) != 0) { // header to put
if (*_Pstate == 0u) {
if (_Last2 - _Mid2 < 3 + _Nput) {
break; // not enough room for header + output
}
// prepend header
*_Mid2++ = '\xef';
*_Mid2++ = '\xbb';
*_Mid2++ = '\xbf';
// prepend header
*_Mid2++ = '\xef';
*_Mid2++ = '\xbb';
*_Mid2++ = '\xbf';
}
}
++_Mid1;
@ -649,15 +665,13 @@ protected:
int __CLR_OR_THIS_CALL do_max_length() const noexcept override {
// return maximum length required for a conversion
if ((_Mymode & consume_header) != 0) {
if constexpr ((_Mymode & consume_header) != 0) {
return 9; // header + max input
}
if ((_Mymode & generate_header) != 0) {
} else if constexpr ((_Mymode & generate_header) != 0) {
return 7; // header + max output
} else {
return 6; // 6-byte max input sequence, no 3-byte header
}
return 6; // 6-byte max input sequence, no 3-byte header
}
int __CLR_OR_THIS_CALL do_encoding() const noexcept override {

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

@ -66,9 +66,9 @@ void __stdcall __std_execution_wake_by_address_all(_In_ const volatile void* _Ad
_END_EXTERN_C
_STD_BEGIN
constexpr size_t _Oversubscription_multiplier = 32;
constexpr size_t _Oversubmission_multiplier = 4;
constexpr size_t _Still_active = static_cast<size_t>(-1);
inline constexpr size_t _Oversubscription_multiplier = 32;
inline constexpr size_t _Oversubmission_multiplier = 4;
inline constexpr size_t _Still_active = static_cast<size_t>(-1);
namespace execution {
class sequenced_policy {

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

@ -556,8 +556,6 @@ protected:
}
}
#pragma warning(push)
#pragma warning(disable : 4127) // conditional expression is constant
streamsize __CLR_OR_THIS_CALL xsgetn(_Elem* _Ptr, streamsize _Count) override {
// get _Count characters from stream
if constexpr (sizeof(_Elem) == 1) {
@ -635,7 +633,6 @@ protected:
return _Mysb::xsputn(_Ptr, _Count);
}
}
#pragma warning(pop)
pos_type __CLR_OR_THIS_CALL seekoff(off_type _Off, ios_base::seekdir _Way,
ios_base::openmode = ios_base::in | ios_base::out) override { // change position by _Off

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

@ -24,8 +24,6 @@ _STL_DISABLE_CLANG_WARNINGS
#pragma push_macro("new")
#undef new
#pragma warning(disable : 4127) // conditional expression is constant
_STD_BEGIN
#define _RNG_PROHIBIT_CHAR(_CheckedType) \
static_assert(!_Is_character<_CheckedType>::value, \

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

@ -169,19 +169,15 @@ struct _Cl_names { // structure to associate class name with mask value
ctype_base::mask _Ctype;
template <class _Elem>
const _Elem* _Get() const;
_NODISCARD const _Elem* _Get() const noexcept {
if constexpr (is_same_v<_Elem, char>) {
return _Narrow;
} else {
return _Wide;
}
}
};
template <>
inline const char* _Cl_names::_Get<char>() const { // get narrow pointer
return _Narrow;
}
template <>
inline const wchar_t* _Cl_names::_Get<wchar_t>() const { // get wide pointer
return _Wide;
}
template <class _RxTraits>
struct _Cmp_cs { // functor to compare two character values for equality
using _Elem = typename _RxTraits::char_type;

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

@ -1231,8 +1231,8 @@ _NODISCARD constexpr bool holds_alternative(
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr decltype(auto) get(
variant<_Types...>& _Var) { // access the contained value of _Var if its _Idx-th alternative is active
_NODISCARD constexpr decltype(auto) get(variant<_Types...>& _Var) {
// access the contained value of _Var if its _Idx-th alternative is active
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
if (_Var.index() == _Idx) {
return _Variant_raw_get<_Idx>(_Var._Storage());
@ -1241,8 +1241,8 @@ _NODISCARD constexpr decltype(auto) get(
_Throw_bad_variant_access();
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr decltype(auto) get(
variant<_Types...>&& _Var) { // access the contained value of _Var if its _Idx-th alternative is active
_NODISCARD constexpr decltype(auto) get(variant<_Types...>&& _Var) {
// access the contained value of _Var if its _Idx-th alternative is active
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
if (_Var.index() == _Idx) {
return _Variant_raw_get<_Idx>(_STD move(_Var)._Storage());
@ -1251,8 +1251,8 @@ _NODISCARD constexpr decltype(auto) get(
_Throw_bad_variant_access();
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr decltype(auto) get(
const variant<_Types...>& _Var) { // access the contained value of _Var if its _Idx-th alternative is active
_NODISCARD constexpr decltype(auto) get(const variant<_Types...>& _Var) {
// access the contained value of _Var if its _Idx-th alternative is active
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
if (_Var.index() == _Idx) {
return _Variant_raw_get<_Idx>(_Var._Storage());
@ -1261,8 +1261,8 @@ _NODISCARD constexpr decltype(auto) get(
_Throw_bad_variant_access();
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr decltype(auto) get(
const variant<_Types...>&& _Var) { // access the contained value of _Var if its _Idx-th alternative is active
_NODISCARD constexpr decltype(auto) get(const variant<_Types...>&& _Var) {
// access the contained value of _Var if its _Idx-th alternative is active
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
if (_Var.index() == _Idx) {
return _Variant_raw_get<_Idx>(_STD move(_Var)._Storage());
@ -1272,32 +1272,32 @@ _NODISCARD constexpr decltype(auto) get(
}
template <class _Ty, class... _Types>
_NODISCARD constexpr decltype(auto) get(
variant<_Types...>& _Var) { // access the contained value of _Var if its alternative _Ty is active
_NODISCARD constexpr decltype(auto) get(variant<_Types...>& _Var) {
// access the contained value of _Var if its alternative _Ty is active
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx < sizeof...(_Types),
"get<T>(variant<Types...>&) requires T to occur exactly once in Types. (N4835 [variant.get]/5)");
return _STD get<_Idx>(_Var);
}
template <class _Ty, class... _Types>
_NODISCARD constexpr decltype(auto) get(
variant<_Types...>&& _Var) { // access the contained value of _Var if its alternative _Ty is active
_NODISCARD constexpr decltype(auto) get(variant<_Types...>&& _Var) {
// access the contained value of _Var if its alternative _Ty is active
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx < sizeof...(_Types),
"get<T>(variant<Types...>&&) requires T to occur exactly once in Types. (N4835 [variant.get]/5)");
return _STD get<_Idx>(_STD move(_Var));
}
template <class _Ty, class... _Types>
_NODISCARD constexpr decltype(auto) get(
const variant<_Types...>& _Var) { // access the contained value of _Var if its alternative _Ty is active
_NODISCARD constexpr decltype(auto) get(const variant<_Types...>& _Var) {
// access the contained value of _Var if its alternative _Ty is active
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx < sizeof...(_Types),
"get<T>(const variant<Types...>&) requires T to occur exactly once in Types. (N4835 [variant.get]/5)");
return _STD get<_Idx>(_Var);
}
template <class _Ty, class... _Types>
_NODISCARD constexpr decltype(auto) get(
const variant<_Types...>&& _Var) { // access the contained value of _Var if its alternative _Ty is active
_NODISCARD constexpr decltype(auto) get(const variant<_Types...>&& _Var) {
// access the contained value of _Var if its alternative _Ty is active
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx < sizeof...(_Types),
"get<T>(const variant<Types...>&&) requires T to occur exactly once in Types. (N4835 [variant.get]/5)");
@ -1305,29 +1305,29 @@ _NODISCARD constexpr decltype(auto) get(
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr auto get_if(
variant<_Types...>* _Ptr) noexcept { // get the address of *_Ptr's contained value if it holds alternative _Idx
_NODISCARD constexpr auto get_if(variant<_Types...>* _Ptr) noexcept {
// get the address of *_Ptr's contained value if it holds alternative _Idx
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
return _Ptr && _Ptr->index() == _Idx ? _STD addressof(_Variant_raw_get<_Idx>(_Ptr->_Storage())) : nullptr;
}
template <size_t _Idx, class... _Types>
_NODISCARD constexpr auto get_if(const variant<_Types...>*
_Ptr) noexcept { // get the address of *_Ptr's contained value if it holds alternative _Idx
_NODISCARD constexpr auto get_if(const variant<_Types...>* _Ptr) noexcept {
// get the address of *_Ptr's contained value if it holds alternative _Idx
static_assert(_Idx < sizeof...(_Types), "variant index out of bounds");
return _Ptr && _Ptr->index() == _Idx ? _STD addressof(_Variant_raw_get<_Idx>(_Ptr->_Storage())) : nullptr;
}
template <class _Ty, class... _Types>
_NODISCARD constexpr add_pointer_t<_Ty> get_if(
variant<_Types...>* _Ptr) noexcept { // get the address of *_Ptr's contained value if it holds alternative _Ty
_NODISCARD constexpr add_pointer_t<_Ty> get_if(variant<_Types...>* _Ptr) noexcept {
// get the address of *_Ptr's contained value if it holds alternative _Ty
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx != _Meta_npos,
"get_if<T>(variant<Types...> *) requires T to occur exactly once in Types. (N4835 [variant.get]/9)");
return _STD get_if<_Idx>(_Ptr);
}
template <class _Ty, class... _Types>
_NODISCARD constexpr add_pointer_t<const _Ty> get_if(
const variant<_Types...>* _Ptr) noexcept { // get the address of *_Ptr's contained value if it holds alternative _Ty
_NODISCARD constexpr add_pointer_t<const _Ty> get_if(const variant<_Types...>* _Ptr) noexcept {
// get the address of *_Ptr's contained value if it holds alternative _Ty
constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;
static_assert(_Idx != _Meta_npos,
"get_if<T>(const variant<Types...> *) requires T to occur exactly once in Types. (N4835 [variant.get]/9)");

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

@ -87,7 +87,7 @@ struct _CRTIMP2_PURE_IMPORT _Crt_new_delete { // base class for marking allocati
#endif // _DEBUG
};
class locale : public _Locbase<int>, public _Crt_new_delete { // nonmutable collection of facets that describe a locale
class locale : public _Locbase<int>, public _Crt_new_delete {
public:
using category = int;

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

@ -41,7 +41,6 @@ class _Mpunct : public money_base { // common base class for moneypunct<_Elem, f
public:
friend _Tidy_guard<_Mpunct>;
public:
using char_type = _Elem;
using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;
@ -303,6 +302,7 @@ protected:
template <class _Elem, class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem>>>
class money_get : public locale::facet { // facet for converting text to encoded monetary amounts
private:
using _Mypunct0 = moneypunct<_Elem, false>;
using _Mypunct1 = moneypunct<_Elem, true>;
@ -607,6 +607,7 @@ __PURE_APPDOMAIN_GLOBAL locale::id money_get<_Elem, _InIt>::id;
template <class _Elem, class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem>>>
class money_put : public locale::facet { // facet for converting encoded monetary amounts to text
private:
using _Mypunct0 = moneypunct<_Elem, false>;
using _Mypunct1 = moneypunct<_Elem, true>;

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

@ -1136,26 +1136,19 @@ __PURE_APPDOMAIN_GLOBAL locale::id num_get<_Elem, _InIt>::id;
#pragma clang diagnostic pop
#endif // __clang__
template <class _Ty>
struct _Hex_float_precision;
template <>
struct _Hex_float_precision<double> {
// the number of hexits needed to represent (DBL_MANT_DIG - 1) bits after the radix point exactly
static constexpr int value = ((DBL_MANT_DIG - 1) + 3) / 4;
};
template <>
struct _Hex_float_precision<long double> {
// the number of hexits needed to represent (LDBL_MANT_DIG - 1) bits after the radix point exactly
static constexpr int value = ((LDBL_MANT_DIG - 1) + 3) / 4;
};
template <class _Ty>
int _Float_put_desired_precision(const streamsize _Precision, const ios_base::fmtflags _Float_flags) {
// return the effective precision determined by N4910 [facet.num.put.virtuals]/2.1 and printf's rules
const bool _Is_hex = _Float_flags == (ios_base::fixed | ios_base::scientific);
if (_Is_hex) {
return _Hex_float_precision<_Ty>::value;
// return the number of hexits needed (after the radix point) to represent the floating-point value exactly
if constexpr (is_same_v<_Ty, double>) {
return ((DBL_MANT_DIG - 1) + 3) / 4;
} else if constexpr (is_same_v<_Ty, long double>) {
return ((LDBL_MANT_DIG - 1) + 3) / 4;
} else {
static_assert(_Always_false<_Ty>, "Expected only double or long double here (not float).");
}
}
if (_Precision > 0) {

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

@ -162,7 +162,9 @@ _STL_DISABLE_CLANG_WARNINGS
#endif // _ITERATOR_DEBUG_LEVEL != 0 && _CONTAINER_DEBUG_LEVEL == 0
#ifndef _STL_CRT_SECURE_INVALID_PARAMETER
#ifdef _DEBUG // avoid emitting unused long strings for function names; see GH-1956
#ifdef _STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER
#define _STL_CRT_SECURE_INVALID_PARAMETER(expr) ::abort()
#elif defined(_DEBUG) // avoid emitting unused long strings for function names; see GH-1956
#define _STL_CRT_SECURE_INVALID_PARAMETER(expr) ::_invalid_parameter(_CRT_WIDE(#expr), L"", __FILEW__, __LINE__, 0)
#else // _DEBUG
#define _STL_CRT_SECURE_INVALID_PARAMETER(expr) _CRT_SECURE_INVALID_PARAMETER(expr)

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

@ -218,7 +218,7 @@ std/containers/unord/unord.set/max_size.pass.cpp FAIL
std/utilities/tuple/tuple.tuple/tuple.apply/apply_large_arity.pass.cpp SKIPPED
std/utilities/tuple/tuple.tuple/tuple.cnstr/recursion_depth.pass.cpp SKIPPED
# Deprecation is a mess. We disable all deprecations in msvc_stdlib_force_include.hpp to allow libc++ tests for
# Deprecation is a mess. We disable all deprecations in msvc_stdlib_force_include.h to allow libc++ tests for
# deprecated features to pass, which breaks when libc++ deprecates the feature and adds two tests that (1) pass
# with deprecation suppressed, and (2) fail without deprecation suppression. We should instead translate libc++
# un-deprecation macros to STL un-deprecation macros in the force-include header, and just skip tests when we
@ -267,7 +267,8 @@ std/algorithms/alg.sorting/alg.sort/partial.sort/partial_sort.pass.cpp:0 FAIL
std/algorithms/alg.sorting/alg.sort/partial.sort/partial_sort_comp.pass.cpp:0 FAIL
# DevCom-1559808: (structured bindings for `subrange` in a constant expression)
std/ranges/range.utility/range.subrange/structured_bindings.pass.cpp:0 FAIL
# Skipped as this sometimes emits "fatal error C1001: Internal compiler error." with a crash dialog.
std/ranges/range.utility/range.subrange/structured_bindings.pass.cpp:0 SKIPPED
# DevCom-1626139 "compile-time NaN comparison"
std/iterators/predef.iterators/reverse.iterators/reverse.iter.cmp/three-way.pass.cpp:0 FAIL
@ -563,6 +564,14 @@ std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp FA
std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp FAIL
# Assertion failed: invalid min and max arguments for uniform_real
# `param_type p(5);` is a precondition violation.
std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_ctor.pass.cpp FAIL
# Assertion failed: invalid beta argument for gamma_distribution
# test4() constructs a negative_binomial_distribution from (40, 1); [rand.dist.bern.negbin] says p == 1 generates undefined probabilities.
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp FAIL
# Assertion failed: (std::lerp(T(2.3), T(2.3), inf) == T(2.3))
# Asserts `(std::lerp(T(2.3), T(2.3), inf) == T(2.3))` and `std::isnan(std::lerp(T( 0), T( 0), inf))`
# They shouldn't behave differently. Both of them should probably return NaN.
@ -710,26 +719,6 @@ std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass
# *** LIKELY STL BUGS ***
# Not yet analyzed, likely STL bugs. Assertions and other runtime failures.
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_ctor.pass.cpp FAIL
# Not yet analyzed, likely STL bugs. Various assertions.
std/re/re.alg/re.alg.match/awk.pass.cpp FAIL
std/re/re.alg/re.alg.match/basic.pass.cpp FAIL
@ -937,5 +926,26 @@ std/ranges/range.access/size.pass.cpp:1 FAIL
std/ranges/range.access/ssize.pass.cpp:1 FAIL
std/utilities/memory/unique.ptr/iterator_concept_conformance.compile.pass.cpp:1 SKIPPED
# Not yet analyzed. Assertion failed: std::abs((kurtosis - x_kurtosis) / x_kurtosis) < VARIOUS_VALUES
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp FAIL
# Not yet analyzed. Assertion failed: std::abs((skew - x_skew) / x_skew) < 0.01
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp FAIL
# *** XFAILs WHICH PASS ***
# Nothing here! :-)

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

@ -218,7 +218,7 @@ containers\unord\unord.set\max_size.pass.cpp
utilities\tuple\tuple.tuple\tuple.apply\apply_large_arity.pass.cpp
utilities\tuple\tuple.tuple\tuple.cnstr\recursion_depth.pass.cpp
# Deprecation is a mess. We disable all deprecations in msvc_stdlib_force_include.hpp to allow libc++ tests for
# Deprecation is a mess. We disable all deprecations in msvc_stdlib_force_include.h to allow libc++ tests for
# deprecated features to pass, which breaks when libc++ deprecates the feature and adds two tests that (1) pass
# with deprecation suppressed, and (2) fail without deprecation suppression. We should instead translate libc++
# un-deprecation macros to STL un-deprecation macros in the force-include header, and just skip tests when we
@ -267,6 +267,7 @@ algorithms\alg.sorting\alg.sort\partial.sort\partial_sort.pass.cpp
algorithms\alg.sorting\alg.sort\partial.sort\partial_sort_comp.pass.cpp
# DevCom-1559808: (structured bindings for `subrange` in a constant expression)
# Skipped as this sometimes emits "fatal error C1001: Internal compiler error." with a crash dialog.
ranges\range.utility\range.subrange\structured_bindings.pass.cpp
# DevCom-1626139 "compile-time NaN comparison"
@ -563,6 +564,14 @@ numerics\rand\rand.dis\rand.dist.samp\rand.dist.samp.pconst\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.samp\rand.dist.samp.plinear\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.samp\rand.dist.samp.plinear\eval.pass.cpp
# Assertion failed: invalid min and max arguments for uniform_real
# `param_type p(5);` is a precondition violation.
numerics\rand\rand.dis\rand.dist.uni\rand.dist.uni.real\param_ctor.pass.cpp
# Assertion failed: invalid beta argument for gamma_distribution
# test4() constructs a negative_binomial_distribution from (40, 1); [rand.dist.bern.negbin] says p == 1 generates undefined probabilities.
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.negbin\eval.pass.cpp
# Assertion failed: (std::lerp(T(2.3), T(2.3), inf) == T(2.3))
# Asserts `(std::lerp(T(2.3), T(2.3), inf) == T(2.3))` and `std::isnan(std::lerp(T( 0), T( 0), inf))`
# They shouldn't behave differently. Both of them should probably return NaN.
@ -706,26 +715,6 @@ ranges\range.factories\range.iota.view\iterator\member_typedefs.compile.pass.cpp
# *** LIKELY STL BUGS ***
# Not yet analyzed, likely STL bugs. Assertions and other runtime failures.
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval.PR44847.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.geo\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.geo\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.negbin\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.negbin\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.lognormal\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.lognormal\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.t\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.t\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.extreme\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.extreme\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.gamma\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.gamma\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.poisson\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.poisson\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.uni\rand.dist.uni.real\param_ctor.pass.cpp
# Not yet analyzed, likely STL bugs. Various assertions.
re\re.alg\re.alg.match\awk.pass.cpp
re\re.alg\re.alg.match\basic.pass.cpp
@ -933,6 +922,26 @@ ranges\range.access\size.pass.cpp
ranges\range.access\ssize.pass.cpp
utilities\memory\unique.ptr\iterator_concept_conformance.compile.pass.cpp
# Not yet analyzed. Assertion failed: std::abs((kurtosis - x_kurtosis) / x_kurtosis) < VARIOUS_VALUES
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval.PR44847.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.geo\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.geo\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.negbin\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.lognormal\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.lognormal\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.t\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.norm\rand.dist.norm.t\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.extreme\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.extreme\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.gamma\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.gamma\eval.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.poisson\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.pois\rand.dist.pois.poisson\eval.pass.cpp
# Not yet analyzed. Assertion failed: std::abs((skew - x_skew) / x_skew) < 0.01
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval_param.pass.cpp
numerics\rand\rand.dis\rand.dist.bern\rand.dist.bern.bin\eval.pass.cpp
# *** SKIPPED FOR MSVC-INTERNAL CONTEST ONLY ***
# "XFAIL: msvc" or "XFAIL: clang"

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

@ -3,7 +3,7 @@
RUNALL_INCLUDE ..\universal_prefix.lst
RUNALL_CROSSLIST
PM_CL="/EHsc /MTd /std:c++latest /permissive- /FImsvc_stdlib_force_include.h /wd4643"
PM_CL="/EHsc /MTd /std:c++latest /permissive- /FImsvc_stdlib_force_include.h /wd4643 /D_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER"
RUNALL_CROSSLIST
PM_CL="/analyze:autolog- /Zc:preprocessor"
PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing"

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

@ -3,4 +3,4 @@
RUNALL_INCLUDE ..\..\universal_prefix.lst
RUNALL_CROSSLIST
PM_CL="/FIforce_include.hpp /w14365 /D_ENFORCE_FACET_SPECIALIZATIONS=1"
PM_CL="/FIforce_include.hpp /w14365 /D_ENFORCE_FACET_SPECIALIZATIONS=1 /D_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER"

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

@ -3,4 +3,4 @@
RUNALL_INCLUDE ..\universal_prefix.lst
RUNALL_CROSSLIST
PM_CL="/FIforce_include.hpp /D_ENFORCE_FACET_SPECIALIZATIONS=1 /D_CRT_SECURE_NO_WARNINGS"
PM_CL="/FIforce_include.hpp /D_ENFORCE_FACET_SPECIALIZATIONS=1 /D_CRT_SECURE_NO_WARNINGS /D_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER"