From 9571b8f238f97bce01bcf3c84a4f87cfb1c00dbf Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Tue, 20 Apr 2021 15:59:22 -0400 Subject: [PATCH] [libc++] [LIBCXX-DEBUG-FIXME] std::advance shouldn't use ADL `>=` on the _Distance type. Convert to a primitive type first; then use primitive `>=` on that value. Differential Revision: https://reviews.llvm.org/D101678 --- libcxx/include/iterator | 4 ++-- .../iterator.operations/robust_against_adl.pass.cpp | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libcxx/include/iterator b/libcxx/include/iterator index ad98d8c..1d308a2 100644 --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -538,10 +538,10 @@ template inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 void advance(_InputIter& __i, _Distance __orig_n) { - _LIBCPP_ASSERT(__orig_n >= 0 || __is_cpp17_bidirectional_iterator<_InputIter>::value, - "Attempt to advance(it, n) with negative n on a non-bidirectional iterator"); typedef decltype(_VSTD::__convert_to_integral(__orig_n)) _IntegralSize; _IntegralSize __n = __orig_n; + _LIBCPP_ASSERT(__n >= 0 || __is_cpp17_bidirectional_iterator<_InputIter>::value, + "Attempt to advance(it, n) with negative n on a non-bidirectional iterator"); _VSTD::__advance(__i, __n, typename iterator_traits<_InputIter>::iterator_category()); } diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp index ace0356..32d770e 100644 --- a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp +++ b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp @@ -6,8 +6,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: LIBCXX-DEBUG-FIXME - // #include -- 2.7.4