7
7
namespace std {
8
8
namespace __lldb {
9
9
10
+ #if __has_cpp_attribute(msvc::no_unique_address)
11
+ #define _LLDB_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]]
12
+ #elif __has_cpp_attribute(no_unique_address)
13
+ #define _LLDB_NO_UNIQUE_ADDRESS [[__no_unique_address__]]
14
+ #endif
15
+
10
16
#if COMPRESSED_PAIR_REV == 0 // Post-c88580c layout
11
17
struct __value_init_tag {};
12
18
struct __default_init_tag {};
@@ -55,7 +61,7 @@ class __compressed_pair : private __compressed_pair_elem<_T1, 0>,
55
61
#elif COMPRESSED_PAIR_REV == 1
56
62
// From libc++ datasizeof.h
57
63
template <class _Tp > struct _FirstPaddingByte {
58
- [[no_unique_address]] _Tp __v_;
64
+ _LLDB_NO_UNIQUE_ADDRESS _Tp __v_;
59
65
char __first_padding_byte_;
60
66
};
61
67
@@ -75,29 +81,30 @@ template <class _ToPad> class __compressed_pair_padding {
75
81
};
76
82
77
83
#define _LLDB_COMPRESSED_PAIR (T1, Initializer1, T2, Initializer2 ) \
78
- [[__gnu__::__aligned__(alignof(T2))]] [[no_unique_address]] T1 Initializer1; \
79
- [[no_unique_address]] __compressed_pair_padding<T1> __padding1_; \
80
- [[no_unique_address]] T2 Initializer2; \
81
- [[no_unique_address]] __compressed_pair_padding<T2> __padding2_;
84
+ [[__gnu__::__aligned__( \
85
+ alignof (T2))]] _LLDB_NO_UNIQUE_ADDRESS T1 Initializer1; \
86
+ _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T1> __padding1_; \
87
+ _LLDB_NO_UNIQUE_ADDRESS T2 Initializer2; \
88
+ _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T2> __padding2_;
82
89
83
90
#define _LLDB_COMPRESSED_TRIPLE (T1, Initializer1, T2, Initializer2, T3, \
84
91
Initializer3) \
85
92
[[using __gnu__: __aligned__(alignof(T2)), \
86
- __aligned__ (alignof(T3))]] [[no_unique_address]] T1 Initializer1; \
87
- [[no_unique_address]] __compressed_pair_padding<T1> __padding1_; \
88
- [[no_unique_address]] T2 Initializer2; \
89
- [[no_unique_address]] __compressed_pair_padding<T2> __padding2_; \
90
- [[no_unique_address]] T3 Initializer3; \
91
- [[no_unique_address]] __compressed_pair_padding<T3> __padding3_;
93
+ __aligned__ (alignof(T3))]] _LLDB_NO_UNIQUE_ADDRESS T1 Initializer1; \
94
+ _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T1> __padding1_; \
95
+ _LLDB_NO_UNIQUE_ADDRESS T2 Initializer2; \
96
+ _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T2> __padding2_; \
97
+ _LLDB_NO_UNIQUE_ADDRESS T3 Initializer3; \
98
+ _LLDB_NO_UNIQUE_ADDRESS __compressed_pair_padding<T3> __padding3_;
92
99
#elif COMPRESSED_PAIR_REV == 2
93
100
#define _LLDB_COMPRESSED_PAIR (T1, Name1, T2, Name2 ) \
94
- [[no_unique_address]] T1 Name1; \
95
- [[no_unique_address]] T2 Name2
101
+ _LLDB_NO_UNIQUE_ADDRESS T1 Name1; \
102
+ _LLDB_NO_UNIQUE_ADDRESS T2 Name2
96
103
97
104
#define _LLDB_COMPRESSED_TRIPLE (T1, Name1, T2, Name2, T3, Name3 ) \
98
- [[no_unique_address]] T1 Name1; \
99
- [[no_unique_address]] T2 Name2; \
100
- [[no_unique_address]] T3 Name3
105
+ _LLDB_NO_UNIQUE_ADDRESS T1 Name1; \
106
+ _LLDB_NO_UNIQUE_ADDRESS T2 Name2; \
107
+ _LLDB_NO_UNIQUE_ADDRESS T3 Name3
101
108
#endif
102
109
} // namespace __lldb
103
110
} // namespace std
0 commit comments