From 99fe7c6cdc638dd6554315cd3d99689bc0c9ea79 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 3 Nov 2023 12:10:35 -0700 Subject: [PATCH 1/2] vector_algorithms.cpp: Avoid confusing quasi-shadowing for functions within an unnamed namespace. --- stl/src/vector_algorithms.cpp | 40 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/stl/src/vector_algorithms.cpp b/stl/src/vector_algorithms.cpp index 11221bc695..d18b740304 100644 --- a/stl/src/vector_algorithms.cpp +++ b/stl/src/vector_algorithms.cpp @@ -1240,7 +1240,7 @@ namespace { // In optimized builds it avoids an extra call, as this function is too large to inline. template - const void* __stdcall __std_find_trivial_unsized(const void* _First, const _Ty _Val) noexcept { + const void* __stdcall __std_find_trivial_unsized_impl(const void* _First, const _Ty _Val) noexcept { #ifndef _M_ARM64EC if (_Use_avx2()) { _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414 @@ -1326,7 +1326,7 @@ namespace { } template - const void* __stdcall __std_find_trivial(const void* _First, const void* _Last, _Ty _Val) noexcept { + const void* __stdcall __std_find_trivial_impl(const void* _First, const void* _Last, _Ty _Val) noexcept { #ifndef _M_ARM64EC size_t _Size_bytes = _Byte_length(_First, _Last); @@ -1380,7 +1380,7 @@ namespace { } template - const void* __stdcall __std_find_last_trivial(const void* _First, const void* _Last, _Ty _Val) noexcept { + const void* __stdcall __std_find_last_trivial_impl(const void* _First, const void* _Last, _Ty _Val) noexcept { const void* const _Real_last = _Last; #ifndef _M_ARM64EC size_t _Size_bytes = _Byte_length(_First, _Last); @@ -1439,7 +1439,7 @@ namespace { template __declspec(noalias) size_t - __stdcall __std_count_trivial(const void* _First, const void* const _Last, const _Ty _Val) noexcept { + __stdcall __std_count_trivial_impl(const void* _First, const void* const _Last, const _Ty _Val) noexcept { size_t _Result = 0; #ifndef _M_ARM64EC @@ -1488,79 +1488,79 @@ namespace { extern "C" { const void* __stdcall __std_find_trivial_unsized_1(const void* const _First, const uint8_t _Val) noexcept { - return __std_find_trivial_unsized<_Find_traits_1>(_First, _Val); + return __std_find_trivial_unsized_impl<_Find_traits_1>(_First, _Val); } const void* __stdcall __std_find_trivial_unsized_2(const void* const _First, const uint16_t _Val) noexcept { - return __std_find_trivial_unsized<_Find_traits_2>(_First, _Val); + return __std_find_trivial_unsized_impl<_Find_traits_2>(_First, _Val); } const void* __stdcall __std_find_trivial_unsized_4(const void* const _First, const uint32_t _Val) noexcept { - return __std_find_trivial_unsized<_Find_traits_4>(_First, _Val); + return __std_find_trivial_unsized_impl<_Find_traits_4>(_First, _Val); } const void* __stdcall __std_find_trivial_unsized_8(const void* const _First, const uint64_t _Val) noexcept { - return __std_find_trivial_unsized<_Find_traits_8>(_First, _Val); + return __std_find_trivial_unsized_impl<_Find_traits_8>(_First, _Val); } const void* __stdcall __std_find_trivial_1( const void* const _First, const void* const _Last, const uint8_t _Val) noexcept { - return __std_find_trivial<_Find_traits_1>(_First, _Last, _Val); + return __std_find_trivial_impl<_Find_traits_1>(_First, _Last, _Val); } const void* __stdcall __std_find_trivial_2( const void* const _First, const void* const _Last, const uint16_t _Val) noexcept { - return __std_find_trivial<_Find_traits_2>(_First, _Last, _Val); + return __std_find_trivial_impl<_Find_traits_2>(_First, _Last, _Val); } const void* __stdcall __std_find_trivial_4( const void* const _First, const void* const _Last, const uint32_t _Val) noexcept { - return __std_find_trivial<_Find_traits_4>(_First, _Last, _Val); + return __std_find_trivial_impl<_Find_traits_4>(_First, _Last, _Val); } const void* __stdcall __std_find_trivial_8( const void* const _First, const void* const _Last, const uint64_t _Val) noexcept { - return __std_find_trivial<_Find_traits_8>(_First, _Last, _Val); + return __std_find_trivial_impl<_Find_traits_8>(_First, _Last, _Val); } const void* __stdcall __std_find_last_trivial_1( const void* const _First, const void* const _Last, const uint8_t _Val) noexcept { - return __std_find_last_trivial<_Find_traits_1>(_First, _Last, _Val); + return __std_find_last_trivial_impl<_Find_traits_1>(_First, _Last, _Val); } const void* __stdcall __std_find_last_trivial_2( const void* const _First, const void* const _Last, const uint16_t _Val) noexcept { - return __std_find_last_trivial<_Find_traits_2>(_First, _Last, _Val); + return __std_find_last_trivial_impl<_Find_traits_2>(_First, _Last, _Val); } const void* __stdcall __std_find_last_trivial_4( const void* const _First, const void* const _Last, const uint32_t _Val) noexcept { - return __std_find_last_trivial<_Find_traits_4>(_First, _Last, _Val); + return __std_find_last_trivial_impl<_Find_traits_4>(_First, _Last, _Val); } const void* __stdcall __std_find_last_trivial_8( const void* const _First, const void* const _Last, const uint64_t _Val) noexcept { - return __std_find_last_trivial<_Find_traits_8>(_First, _Last, _Val); + return __std_find_last_trivial_impl<_Find_traits_8>(_First, _Last, _Val); } __declspec(noalias) size_t __stdcall __std_count_trivial_1(const void* const _First, const void* const _Last, const uint8_t _Val) noexcept { - return __std_count_trivial<_Find_traits_1>(_First, _Last, _Val); + return __std_count_trivial_impl<_Find_traits_1>(_First, _Last, _Val); } __declspec(noalias) size_t __stdcall __std_count_trivial_2(const void* const _First, const void* const _Last, const uint16_t _Val) noexcept { - return __std_count_trivial<_Find_traits_2>(_First, _Last, _Val); + return __std_count_trivial_impl<_Find_traits_2>(_First, _Last, _Val); } __declspec(noalias) size_t __stdcall __std_count_trivial_4(const void* const _First, const void* const _Last, const uint32_t _Val) noexcept { - return __std_count_trivial<_Find_traits_4>(_First, _Last, _Val); + return __std_count_trivial_impl<_Find_traits_4>(_First, _Last, _Val); } __declspec(noalias) size_t __stdcall __std_count_trivial_8(const void* const _First, const void* const _Last, const uint64_t _Val) noexcept { - return __std_count_trivial<_Find_traits_8>(_First, _Last, _Val); + return __std_count_trivial_impl<_Find_traits_8>(_First, _Last, _Val); } } // extern "C" From 749aff93f417f6c1b799132d18bf72f3d8617181 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 3 Nov 2023 13:12:54 -0700 Subject: [PATCH 2/2] Move the vector algorithm wrapper templates from global to std. --- stl/inc/algorithm | 6 ++++-- stl/inc/xutility | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/stl/inc/algorithm b/stl/inc/algorithm index 925c5fcfb0..480d444978 100644 --- a/stl/inc/algorithm +++ b/stl/inc/algorithm @@ -61,6 +61,7 @@ const void* __stdcall __std_find_last_trivial_4(const void* _First, const void* const void* __stdcall __std_find_last_trivial_8(const void* _First, const void* _Last, uint64_t _Val) noexcept; _END_EXTERN_C +_STD_BEGIN template _STD pair<_Ty*, _Ty*> __std_minmax_element(_Ty* _First, _Ty* _Last) noexcept { constexpr bool _Signed = _STD is_signed_v<_Ty>; @@ -102,6 +103,7 @@ _Ty* __std_find_last_trivial(_Ty* _First, _Ty* _Last, const _TVal _Val) noexcept static_assert(_STD _Always_false<_Ty>, "Unexpected size"); } } +_STD_END #endif // _USE_STD_VECTOR_ALGORITHMS _STD_BEGIN @@ -9848,7 +9850,7 @@ namespace ranges { if (!_STD is_constant_evaluated()) { const auto _First_ptr = _STD to_address(_First); const auto _Last_ptr = _First_ptr + (_Last - _First); - const auto _Result = _CSTD __std_minmax_element(_First_ptr, _Last_ptr); + const auto _Result = _STD __std_minmax_element(_First_ptr, _Last_ptr); if constexpr (is_pointer_v<_It>) { return {_Result.first, _Result.second}; } else { @@ -10046,7 +10048,7 @@ namespace ranges { if (!_STD is_constant_evaluated()) { const auto _First_ptr = _STD to_address(_First); const auto _Last_ptr = _First_ptr + (_Last - _First); - const auto _Result = _CSTD __std_minmax_element(_First_ptr, _Last_ptr); + const auto _Result = _STD __std_minmax_element(_First_ptr, _Last_ptr); return {static_cast<_Vty>(*_Result.first), static_cast<_Vty>(*_Result.second)}; } } diff --git a/stl/inc/xutility b/stl/inc/xutility index 7305d98b1d..13a2996740 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -94,6 +94,7 @@ const void* __stdcall __std_max_element_4(const void* _First, const void* _Last, const void* __stdcall __std_max_element_8(const void* _First, const void* _Last, bool _Signed) noexcept; _END_EXTERN_C +_STD_BEGIN template __declspec(noalias) size_t __std_count_trivial(_Ty* _First, _Ty* _Last, const _TVal _Val) noexcept { if constexpr (_STD is_pointer_v<_TVal> || _STD is_null_pointer_v<_TVal>) { @@ -186,6 +187,7 @@ _Ty* __std_max_element(_Ty* _First, _Ty* _Last) noexcept { static_assert(_STD _Always_false<_Ty>, "Unexpected size"); } } +_STD_END #endif // _USE_STD_VECTOR_ALGORITHMS