Skip to content

Commit ed912b1

Browse files
committed
libstdc++: Fix attribute order on __normal_iterator friends [PR120949]
In r16-1911-g6596f5ab746533 I claimed to have reordered some attributes for compatibility with Clang, but it looks like I got the Clang restriction backwards and put them all in the wrong order. Clang trunk accepts either order (probably since the llvm/llvm-project#133107 fix) but released versions still require a particular order. There were also some cases where the attributes were after the friend keyword, which Clang trunk still rejects. libstdc++-v3/ChangeLog: PR libstdc++/120949 * include/bits/stl_iterator.h (__normal_iterator): Fix order of always_inline and nodiscard attributes for Clang compatibility.
1 parent 5ca5e1d commit ed912b1

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

libstdc++-v3/include/bits/stl_iterator.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12111211
#else
12121212
// Forward iterator requirements
12131213
template<typename _Iter>
1214-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1214+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12151215
friend
12161216
_GLIBCXX_CONSTEXPR
12171217
bool
@@ -1220,7 +1220,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12201220
_GLIBCXX_NOEXCEPT
12211221
{ return __lhs.base() == __rhs.base(); }
12221222

1223-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1223+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12241224
friend
12251225
_GLIBCXX_CONSTEXPR
12261226
bool
@@ -1229,7 +1229,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12291229
{ return __lhs.base() == __rhs.base(); }
12301230

12311231
template<typename _Iter>
1232-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1232+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12331233
friend
12341234
_GLIBCXX_CONSTEXPR
12351235
bool
@@ -1238,7 +1238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12381238
_GLIBCXX_NOEXCEPT
12391239
{ return __lhs.base() != __rhs.base(); }
12401240

1241-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1241+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12421242
friend
12431243
_GLIBCXX_CONSTEXPR
12441244
bool
@@ -1248,15 +1248,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12481248

12491249
// Random access iterator requirements
12501250
template<typename _Iter>
1251+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12511252
friend
1252-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
1253+
_GLIBCXX_CONSTEXPR
12531254
inline bool
12541255
operator<(const __normal_iterator& __lhs,
12551256
const __normal_iterator<_Iter, _Container>& __rhs)
12561257
_GLIBCXX_NOEXCEPT
12571258
{ return __lhs.base() < __rhs.base(); }
12581259

1259-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1260+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12601261
friend
12611262
_GLIBCXX20_CONSTEXPR
12621263
bool
@@ -1265,15 +1266,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12651266
{ return __lhs.base() < __rhs.base(); }
12661267

12671268
template<typename _Iter>
1269+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12681270
friend
1269-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
1271+
_GLIBCXX_CONSTEXPR
12701272
bool
12711273
operator>(const __normal_iterator& __lhs,
12721274
const __normal_iterator<_Iter, _Container>& __rhs)
12731275
_GLIBCXX_NOEXCEPT
12741276
{ return __lhs.base() > __rhs.base(); }
12751277

1276-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1278+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12771279
friend
12781280
_GLIBCXX_CONSTEXPR
12791281
bool
@@ -1282,7 +1284,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12821284
{ return __lhs.base() > __rhs.base(); }
12831285

12841286
template<typename _Iter>
1285-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1287+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12861288
friend
12871289
_GLIBCXX_CONSTEXPR
12881290
bool
@@ -1291,7 +1293,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
12911293
_GLIBCXX_NOEXCEPT
12921294
{ return __lhs.base() <= __rhs.base(); }
12931295

1294-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1296+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
12951297
friend
12961298
_GLIBCXX_CONSTEXPR
12971299
bool
@@ -1300,7 +1302,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
13001302
{ return __lhs.base() <= __rhs.base(); }
13011303

13021304
template<typename _Iter>
1303-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1305+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
13041306
friend
13051307
_GLIBCXX_CONSTEXPR
13061308
bool
@@ -1309,7 +1311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
13091311
_GLIBCXX_NOEXCEPT
13101312
{ return __lhs.base() >= __rhs.base(); }
13111313

1312-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1314+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
13131315
friend
13141316
_GLIBCXX_CONSTEXPR
13151317
bool
@@ -1341,15 +1343,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
13411343
#endif
13421344
{ return __lhs.base() - __rhs.base(); }
13431345

1344-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1346+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
13451347
friend
13461348
_GLIBCXX_CONSTEXPR
13471349
difference_type
13481350
operator-(const __normal_iterator& __lhs, const __normal_iterator& __rhs)
13491351
_GLIBCXX_NOEXCEPT
13501352
{ return __lhs.base() - __rhs.base(); }
13511353

1352-
__attribute__((__always_inline__)) _GLIBCXX_NODISCARD
1354+
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
13531355
friend
13541356
_GLIBCXX_CONSTEXPR
13551357
__normal_iterator

0 commit comments

Comments
 (0)