diff --git a/stl/inc/memory b/stl/inc/memory index f4c3d571fe9..d37285dcba5 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) \ @@ -4357,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) 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/stl/inc/xutility b/stl/inc/xutility index b66c5180f06..06551e64a5a 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 @@ -7236,6 +7240,10 @@ _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") + #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..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 @@ -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 // lifetimebound != 4 + +#if noop_dtor != 5 +#error bad macro expansion +#endif // noop_dtor != 5