зеркало из https://github.com/microsoft/STL.git
Even more various cleanups (#2656)
This commit is contained in:
Родитель
7209f869b7
Коммит
9bf8f3f9b0
|
@ -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,7 +616,8 @@ protected:
|
|||
break; // not enough room, even without header
|
||||
}
|
||||
|
||||
if (*_Pstate == 0u && (_Mymode & generate_header) != 0) { // header to put
|
||||
if constexpr ((_Mymode & generate_header) != 0) { // header to put
|
||||
if (*_Pstate == 0u) {
|
||||
if (_Last2 - _Mid2 < 3 + _Nput) {
|
||||
break; // not enough room for header + output
|
||||
}
|
||||
|
@ -612,6 +627,7 @@ protected:
|
|||
*_Mid2++ = '\xbb';
|
||||
*_Mid2++ = '\xbf';
|
||||
}
|
||||
}
|
||||
|
||||
++_Mid1;
|
||||
if (_Save || _Nextra < 3) { // put first byte of sequence, if not already put
|
||||
|
@ -649,16 +665,14 @@ 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
|
||||
}
|
||||
}
|
||||
|
||||
int __CLR_OR_THIS_CALL do_encoding() const noexcept override {
|
||||
// return length of code sequence (from codecvt)
|
||||
|
|
|
@ -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,18 +169,14 @@ struct _Cl_names { // structure to associate class name with mask value
|
|||
ctype_base::mask _Ctype;
|
||||
|
||||
template <class _Elem>
|
||||
const _Elem* _Get() const;
|
||||
};
|
||||
|
||||
template <>
|
||||
inline const char* _Cl_names::_Get<char>() const { // get narrow pointer
|
||||
_NODISCARD const _Elem* _Get() const noexcept {
|
||||
if constexpr (is_same_v<_Elem, char>) {
|
||||
return _Narrow;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline const wchar_t* _Cl_names::_Get<wchar_t>() const { // get wide pointer
|
||||
} else {
|
||||
return _Wide;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <class _RxTraits>
|
||||
struct _Cmp_cs { // functor to compare two character values for equality
|
||||
|
|
|
@ -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"
|
||||
|
|
Загрузка…
Ссылка в новой задаче