Skip to content

Commit 5226b57

Browse files
Workaround for non-_Ugly attribute tokens (#3760)
Co-authored-by: Stephan T. Lavavej <[email protected]>
1 parent 641dd9b commit 5226b57

File tree

7 files changed

+90
-0
lines changed

7 files changed

+90
-0
lines changed

stl/inc/memory

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ _STL_DISABLE_CLANG_WARNINGS
2525
#pragma push_macro("new")
2626
#undef new
2727

28+
// TRANSITION, non-_Ugly attribute tokens
29+
#pragma push_macro("msvc")
30+
#undef msvc
31+
2832
_STD_BEGIN
2933
#if _HAS_CXX17
3034
#define _REQUIRE_PARALLEL_LVALUE_ITERATOR(_Iter) \
@@ -4349,6 +4353,10 @@ namespace _DEPRECATE_TR1_NAMESPACE tr1 {
43494353
#endif // _HAS_TR1_NAMESPACE
43504354

43514355
_STD_END
4356+
4357+
// TRANSITION, non-_Ugly attribute tokens
4358+
#pragma pop_macro("msvc")
4359+
43524360
#pragma pop_macro("new")
43534361
_STL_RESTORE_CLANG_WARNINGS
43544362
#pragma warning(pop)

stl/inc/system_error

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ _STL_DISABLE_CLANG_WARNINGS
2929
#pragma push_macro("new")
3030
#undef new
3131

32+
// TRANSITION, non-_Ugly attribute tokens
33+
#pragma push_macro("msvc")
34+
#pragma push_macro("noop_dtor")
35+
#undef msvc
36+
#undef noop_dtor
37+
3238
_STD_BEGIN
3339
_EXPORT_STD enum class io_errc { // error codes for ios_base::failure
3440
stream = 1
@@ -728,6 +734,10 @@ _NODISCARD inline error_code _Make_ec(__std_win_error _Errno) noexcept { // make
728734
_STD_END
729735
#endif // _HAS_CXX17
730736

737+
// TRANSITION, non-_Ugly attribute tokens
738+
#pragma pop_macro("noop_dtor")
739+
#pragma pop_macro("msvc")
740+
731741
#pragma pop_macro("new")
732742
_STL_RESTORE_CLANG_WARNINGS
733743
#pragma warning(pop)

stl/inc/type_traits

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ _STL_DISABLE_CLANG_WARNINGS
1919
#pragma push_macro("new")
2020
#undef new
2121

22+
// TRANSITION, non-_Ugly attribute tokens
23+
#pragma push_macro("msvc")
24+
#pragma push_macro("intrinsic")
25+
#pragma push_macro("known_semantics")
26+
#undef msvc
27+
#undef intrinsic
28+
#undef known_semantics
29+
2230
_STD_BEGIN
2331
template <class>
2432
// TRANSITION, CWG-2518: false value attached to a dependent name (for static_assert)
@@ -2582,6 +2590,11 @@ _STL_RESTORE_DEPRECATED_WARNING
25822590

25832591
_STD_END
25842592

2593+
// TRANSITION, non-_Ugly attribute tokens
2594+
#pragma pop_macro("known_semantics")
2595+
#pragma pop_macro("intrinsic")
2596+
#pragma pop_macro("msvc")
2597+
25852598
#pragma pop_macro("new")
25862599
_STL_RESTORE_CLANG_WARNINGS
25872600
#pragma warning(pop)

stl/inc/utility

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ _STL_DISABLE_CLANG_WARNINGS
3030
#pragma push_macro("new")
3131
#undef new
3232

33+
// TRANSITION, non-_Ugly attribute tokens
34+
#pragma push_macro("msvc")
35+
#pragma push_macro("intrinsic")
36+
#pragma push_macro("known_semantics")
37+
#undef msvc
38+
#undef intrinsic
39+
#undef known_semantics
40+
3341
_STD_BEGIN
3442
_EXPORT_STD template <class _Ty, _Ty... _Vals>
3543
struct integer_sequence { // sequence of integer parameters
@@ -956,6 +964,11 @@ namespace _DEPRECATE_TR1_NAMESPACE tr1 {
956964

957965
_STD_END
958966

967+
// TRANSITION, non-_Ugly attribute tokens
968+
#pragma pop_macro("known_semantics")
969+
#pragma pop_macro("intrinsic")
970+
#pragma pop_macro("msvc")
971+
959972
#pragma pop_macro("new")
960973
_STL_RESTORE_CLANG_WARNINGS
961974
#pragma warning(pop)

stl/inc/xtr1common

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ _STL_DISABLE_CLANG_WARNINGS
1616
#pragma push_macro("new")
1717
#undef new
1818

19+
// TRANSITION, non-_Ugly attribute tokens
20+
#pragma push_macro("msvc")
21+
#pragma push_macro("known_semantics")
22+
#undef msvc
23+
#undef known_semantics
24+
1925
_STD_BEGIN
2026
_EXPORT_STD template <class _Ty, _Ty _Val>
2127
struct integral_constant {
@@ -237,6 +243,11 @@ struct remove_cvref {
237243
#endif // _HAS_CXX20
238244

239245
_STD_END
246+
247+
// TRANSITION, non-_Ugly attribute tokens
248+
#pragma pop_macro("known_semantics")
249+
#pragma pop_macro("msvc")
250+
240251
#pragma pop_macro("new")
241252
_STL_RESTORE_CLANG_WARNINGS
242253
#pragma warning(pop)

stl/inc/xutility

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ _STL_DISABLE_CLANG_WARNINGS
2525
#pragma push_macro("new")
2626
#undef new
2727

28+
// TRANSITION, non-_Ugly attribute tokens
29+
#pragma push_macro("msvc")
30+
#undef msvc
31+
2832
#if defined(_CRTBLD) && defined(CRTDLL2)
2933
// TRANSITION, ABI: The vector algorithms are compiled into the import lib, so we disable their usage when building
3034
// the DLL. (We could additionally link them into the DLL - not as exports, just for internal usage - but we
@@ -7226,6 +7230,10 @@ _NODISCARD constexpr bool _Mul_overflow(const _Int _Left, const _Int _Right, _In
72267230
#endif // _HAS_CXX23 && defined(__cpp_lib_concepts)
72277231

72287232
_STD_END
7233+
7234+
// TRANSITION, non-_Ugly attribute tokens
7235+
#pragma pop_macro("msvc")
7236+
72297237
#pragma pop_macro("new")
72307238
_STL_RESTORE_CLANG_WARNINGS
72317239
#pragma warning(pop)

tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,31 @@
77
#define xtime delete
88
#define xtime_get delete
99

10+
// Also test GH-2645: <yvals_core.h>: Conformance issue on [[msvc::known_semantics]]
11+
#define msvc 1
12+
#define known_semantics 2
13+
#define intrinsic 3
14+
#define lifetimebound 4
15+
#define noop_dtor 5
16+
1017
#include <__msvc_all_public_headers.hpp>
18+
19+
#if msvc != 1
20+
#error bad macro expansion
21+
#endif // msvc != 1
22+
23+
#if known_semantics != 2
24+
#error bad macro expansion
25+
#endif // known_semantics != 2
26+
27+
#if intrinsic != 3
28+
#error bad macro expansion
29+
#endif // intrinsic != 3
30+
31+
#if lifetimebound != 4
32+
#error bad macro expansion
33+
#endif // lifetimebound != 4
34+
35+
#if noop_dtor != 5
36+
#error bad macro expansion
37+
#endif // noop_dtor != 5

0 commit comments

Comments
 (0)