From 897a9a781ef55f0586e5ffbb8436e931e84869f8 Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Sun, 11 Jun 2023 01:49:20 +0800 Subject: [PATCH 1/4] Push and pop attribute tokens like `new` --- stl/inc/system_error | 10 +++++++ stl/inc/type_traits | 13 +++++++++ stl/inc/utility | 13 +++++++++ stl/inc/xtr1common | 11 ++++++++ .../test.compile.pass.cpp | 27 +++++++++++++++++++ 5 files changed, 74 insertions(+) diff --git a/stl/inc/system_error b/stl/inc/system_error index 1968efd9207..97b39491d9d 100644 --- a/stl/inc/system_error +++ b/stl/inc/system_error @@ -29,6 +29,12 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("noop_dtor") +#undef msvc +#undef noop_dtor + _STD_BEGIN _EXPORT_STD enum class io_errc { // error codes for ios_base::failure stream = 1 @@ -728,6 +734,10 @@ _NODISCARD inline error_code _Make_ec(__std_win_error _Errno) noexcept { // make _STD_END #endif // _HAS_CXX17 +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("noop_dtor") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/stl/inc/type_traits b/stl/inc/type_traits index 13193dc15fb..e36e2e587b7 100644 --- a/stl/inc/type_traits +++ b/stl/inc/type_traits @@ -19,6 +19,14 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("intrinsic") +#pragma push_macro("known_semantics") +#undef msvc +#undef intrinsic +#undef known_semantics + _STD_BEGIN template // TRANSITION, CWG-2518: false value attached to a dependent name (for static_assert) @@ -2582,6 +2590,11 @@ _STL_RESTORE_DEPRECATED_WARNING _STD_END +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("known_semantics") +#pragma pop_macro("intrinsic") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/stl/inc/utility b/stl/inc/utility index c3a70f4cb8d..de1574d9c76 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -30,6 +30,14 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("intrinsic") +#pragma push_macro("known_semantics") +#undef msvc +#undef intrinsic +#undef known_semantics + _STD_BEGIN _EXPORT_STD template struct integer_sequence { // sequence of integer parameters @@ -956,6 +964,11 @@ namespace _DEPRECATE_TR1_NAMESPACE tr1 { _STD_END +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("known_semantics") +#pragma pop_macro("intrinsic") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/stl/inc/xtr1common b/stl/inc/xtr1common index f646d9625da..c36c895a453 100644 --- a/stl/inc/xtr1common +++ b/stl/inc/xtr1common @@ -16,6 +16,12 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#pragma push_macro("known_semantics") +#undef msvc +#undef known_semantics + _STD_BEGIN _EXPORT_STD template struct integral_constant { @@ -237,6 +243,11 @@ struct remove_cvref { #endif // _HAS_CXX20 _STD_END + +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("known_semantics") +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) diff --git a/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp b/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp index fbd1149a46d..fac5214328e 100644 --- a/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp +++ b/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp @@ -6,4 +6,31 @@ #define xtime delete #define xtime_get delete +// Also test GH-2645: : Conformance issue on [[msvc::known_semantics]] +#define msvc 1 +#define known_semantics 2 +#define intrinsic 3 +#define lifetimebound 4 +#define noop_dtor 5 + #include <__msvc_all_public_headers.hpp> + +#if msvc != 1 +#error bad macro expansion +#endif // msvc != 1 + +#if known_semantics != 2 +#error bad macro expansion +#endif // known_semantics != 2 + +#if intrinsic != 3 +#error bad macro expansion +#endif // intrinsic != 3 + +#if lifetimebound != 4 +#error bad macro expansion +#endif // intrinsic != 4 + +#if noop_dtor != 5 +#error bad macro expansion +#endif // noop_dtor != 5 From 2222b42eca9f7019add9a053d2c61a6fffdb99bc Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Sun, 11 Jun 2023 02:17:57 +0800 Subject: [PATCH 2/4] Forgotten `[[msvc::constexpr]]` occurences And fix copy pasta --- stl/inc/memory | 4 ++++ stl/inc/xutility | 7 +++++++ .../tests/GH_002206_unreserved_names/test.compile.pass.cpp | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/stl/inc/memory b/stl/inc/memory index f4c3d571fe9..2e261ca3b80 100644 --- a/stl/inc/memory +++ b/stl/inc/memory @@ -25,6 +25,10 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#undef msvc + _STD_BEGIN #if _HAS_CXX17 #define _REQUIRE_PARALLEL_LVALUE_ITERATOR(_Iter) \ diff --git a/stl/inc/xutility b/stl/inc/xutility index b66c5180f06..9c625681462 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -25,6 +25,10 @@ _STL_DISABLE_CLANG_WARNINGS #pragma push_macro("new") #undef new +// TRANSITION, non-_Ugly attribute tokens +#pragma push_macro("msvc") +#undef msvc + #if defined(_CRTBLD) && defined(CRTDLL2) // TRANSITION, ABI: The vector algorithms are compiled into the import lib, so we disable their usage when building // the DLL. (We could additionally link them into the DLL - not as exports, just for internal usage - but we @@ -7235,6 +7239,9 @@ _NODISCARD constexpr bool _Mul_overflow(const _Int _Left, const _Int _Right, _In } #endif // _HAS_CXX23 && defined(__cpp_lib_concepts) +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("msvc") + _STD_END #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS diff --git a/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp b/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp index fac5214328e..2d91b2c7c55 100644 --- a/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp +++ b/tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp @@ -29,7 +29,7 @@ #if lifetimebound != 4 #error bad macro expansion -#endif // intrinsic != 4 +#endif // lifetimebound != 4 #if noop_dtor != 5 #error bad macro expansion From 9b153946b1ec6aadfd5b2d942fc6241175333323 Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Sun, 11 Jun 2023 02:19:26 +0800 Subject: [PATCH 3/4] Missed change for `` --- stl/inc/memory | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stl/inc/memory b/stl/inc/memory index 2e261ca3b80..d37285dcba5 100644 --- a/stl/inc/memory +++ b/stl/inc/memory @@ -4361,6 +4361,10 @@ namespace _DEPRECATE_TR1_NAMESPACE tr1 { #endif // _HAS_TR1_NAMESPACE _STD_END + +// TRANSITION, non-_Ugly attribute tokens +#pragma pop_macro("msvc") + #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop) From 6910746ef7c9e86ad1c2ec3e841ebb06c00e289a Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Mon, 12 Jun 2023 11:30:39 -0700 Subject: [PATCH 4/4] Style nitpick: Follow 'scope' order. --- stl/inc/xutility | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stl/inc/xutility b/stl/inc/xutility index 9c625681462..06551e64a5a 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -7239,10 +7239,11 @@ _NODISCARD constexpr bool _Mul_overflow(const _Int _Left, const _Int _Right, _In } #endif // _HAS_CXX23 && defined(__cpp_lib_concepts) +_STD_END + // TRANSITION, non-_Ugly attribute tokens #pragma pop_macro("msvc") -_STD_END #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS #pragma warning(pop)