From 8e1667584a9d933908e524bf5e096a7b73d9783d Mon Sep 17 00:00:00 2001 From: clundro <859287553@qq.com> Date: Wed, 19 Apr 2023 20:35:54 +0800 Subject: [PATCH 1/3] add _MSVC_INTRINSIC to some conversion func. Signed-off-by: clundro <859287553@qq.com> --- stl/inc/cstddef | 2 +- stl/inc/ranges | 2 +- stl/inc/utility | 4 ++-- stl/inc/xutility | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/stl/inc/cstddef b/stl/inc/cstddef index 91aa2802024..4b5d28e7a8d 100644 --- a/stl/inc/cstddef +++ b/stl/inc/cstddef @@ -86,7 +86,7 @@ _EXPORT_STD constexpr byte& operator^=(byte& _Left, const byte _Right) noexcept } _EXPORT_STD template , int> = 0> -_NODISCARD constexpr _IntType to_integer(const byte _Arg) noexcept { +_NODISCARD _MSVC_INTRINSIC constexpr _IntType to_integer(const byte _Arg) noexcept { return static_cast<_IntType>(_Arg); } #endif // __cpp_lib_byte diff --git a/stl/inc/ranges b/stl/inc/ranges index 0d54666d9b3..47ff9fb3c26 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -3570,7 +3570,7 @@ namespace ranges { #endif // ^^^ workaround ^^^ template - _NODISCARD constexpr _Ty& _As_lvalue(_Ty&& _Val) noexcept { + _NODISCARD _MSVC_INTRINSIC constexpr _Ty& _As_lvalue(_Ty&& _Val) noexcept { return static_cast<_Ty&>(_Val); } diff --git a/stl/inc/utility b/stl/inc/utility index d16740f2c73..168f97e39c5 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -765,7 +765,7 @@ _CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val) noexcept( } _EXPORT_STD template -_NODISCARD constexpr add_const_t<_Ty>& as_const(_Ty& _Val) noexcept { // view _Val through const lenses +_NODISCARD _MSVC_INTRINSIC constexpr add_const_t<_Ty>& as_const(_Ty& _Val) noexcept { // view _Val through const lenses return _Val; } @@ -916,7 +916,7 @@ inline constexpr bool _Can_reference<_Ty, void_t<_Ty&>> = true; #if _HAS_CXX23 _EXPORT_STD template -_NODISCARD constexpr underlying_type_t<_Ty> to_underlying(_Ty _Value) noexcept { +_NODISCARD _MSVC_INTRINSIC constexpr underlying_type_t<_Ty> to_underlying(_Ty _Value) noexcept { return static_cast>(_Value); } diff --git a/stl/inc/xutility b/stl/inc/xutility index 9ed0ea2df90..354e6c8f5e8 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -2657,7 +2657,7 @@ namespace ranges { concept constant_range = input_range<_Rng> && _Constant_iterator>; template - _NODISCARD constexpr auto& _Possibly_const_range(_Rng& _Range) noexcept { + _NODISCARD _MSVC_INTRINSIC constexpr auto& _Possibly_const_range(_Rng& _Range) noexcept { if constexpr (constant_range && !constant_range<_Rng>) { return _STD as_const(_Range); } else { @@ -2666,7 +2666,7 @@ namespace ranges { } template - _NODISCARD constexpr auto _As_const_pointer(const _Ty* _Ptr) noexcept { + _NODISCARD _MSVC_INTRINSIC constexpr auto _As_const_pointer(const _Ty* _Ptr) noexcept { return _Ptr; } From f97d0180fab79b55331f792c79fea79ee278fcbd Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Fri, 14 Jul 2023 14:44:17 +0800 Subject: [PATCH 2/3] Push and pop macros --- stl/inc/cstddef | 10 ++++++++++ stl/inc/ranges | 10 ++++++++++ stl/inc/xutility | 3 +++ 3 files changed, 23 insertions(+) diff --git a/stl/inc/cstddef b/stl/inc/cstddef index 4b5d28e7a8d..756b2316b36 100644 --- a/stl/inc/cstddef +++ b/stl/inc/cstddef @@ -19,6 +19,12 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("intrinsic") +#undef msvc +#undef intrinsic + _STD_BEGIN _EXPORT_STD using _CSTD ptrdiff_t; _EXPORT_STD using _CSTD size_t; @@ -95,6 +101,10 @@ _STD_END using _STD max_align_t; // intentional, for historical reasons +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("intrinsic") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/stl/inc/ranges b/stl/inc/ranges index d8f631f5b89..ebf30357e65 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -31,6 +31,12 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("intrinsic") +#undef msvc +#undef intrinsic + _STD_BEGIN namespace ranges { // MUCH machinery defined in @@ -10492,6 +10498,10 @@ _EXPORT_STD namespace views = ranges::views; _STD_END +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("intrinsic") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/stl/inc/xutility b/stl/inc/xutility index fc3799990cd..60ea3b5a3ef 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -23,7 +23,9 @@ _STL_DISABLE_CLANG_WARNINGS // TRANSITION, non-_Ugly attribute tokens #pragma push_macro("msvc") +#pragma push_macro("intrinsic") #undef msvc +#undef intrinsic #if defined(_CRTBLD) && defined(CRTDLL2) // TRANSITION, ABI: The vector algorithms are compiled into the import lib, so we disable their usage when building @@ -7239,6 +7241,7 @@ _NODISCARD constexpr bool _Mul_overflow(const _Int _Left, const _Int _Right, _In _STD_END // TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("intrinsic") #pragma pop_macro("msvc") #pragma pop_macro("new") From 1dc008a57f2805ad4206750bafcb1f4dc7cb6c5f Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 18 Jul 2023 18:21:35 -0700 Subject: [PATCH 3/3] Undo changes for `_As_lvalue` in ``. --- stl/inc/ranges | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/stl/inc/ranges b/stl/inc/ranges index ebf30357e65..fe82e889990 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -31,12 +31,6 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new -// TRANSITION, non-_Ugly attribute tokens -#pragma push_macro("msvc") -#pragma push_macro("intrinsic") -#undef msvc -#undef intrinsic - _STD_BEGIN namespace ranges { // MUCH machinery defined in @@ -3650,7 +3644,7 @@ namespace ranges { } // namespace views template - _NODISCARD _MSVC_INTRINSIC constexpr _Ty& _As_lvalue(_Ty&& _Val) noexcept { + _NODISCARD constexpr _Ty& _As_lvalue(_Ty&& _Val) noexcept { return static_cast<_Ty&>(_Val); } @@ -10498,10 +10492,6 @@ _EXPORT_STD namespace views = ranges::views; _STD_END -// TRANSITION, non-_Ugly attribute tokens -#pragma pop_macro("intrinsic") -#pragma pop_macro("msvc") - #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop)