Skip to content

Commit 781c476

Browse files
committed
[libc++] ADL-proof vector<bool> by adding _VSTD:: qualification on calls.
This affects only vectors with weird/malicious allocators, the same corner case covered in D91708, but for `vector<bool>` this time. Also ADL-proof <__tree>, which affects only sets and maps with weird/malicious allocators where the ADL trap is in the *fancy pointer type*. Also drive-by _VSTD:: qualification in the guts of std::bind, std::packaged_task, std::condition_variable. Differential Revision: https://reviews.llvm.org/D93424
1 parent 6d94eea commit 781c476

File tree

10 files changed

+82
-77
lines changed

10 files changed

+82
-77
lines changed

libcxx/include/__bit_reference

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ __bit_iterator<_Cp, _IsConst>
239239
find(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value_)
240240
{
241241
if (static_cast<bool>(__value_))
242-
return __find_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
243-
return __find_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
242+
return _VSTD::__find_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
243+
return _VSTD::__find_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
244244
}
245245

246246
// count
@@ -313,8 +313,8 @@ typename __bit_iterator<_Cp, _IsConst>::difference_type
313313
count(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value_)
314314
{
315315
if (static_cast<bool>(__value_))
316-
return __count_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
317-
return __count_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
316+
return _VSTD::__count_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
317+
return _VSTD::__count_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
318318
}
319319

320320
// fill_n
@@ -387,9 +387,9 @@ fill_n(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n, bool __v
387387
if (__n > 0)
388388
{
389389
if (__value_)
390-
__fill_n_true(__first, __n);
390+
_VSTD::__fill_n_true(__first, __n);
391391
else
392-
__fill_n_false(__first, __n);
392+
_VSTD::__fill_n_false(__first, __n);
393393
}
394394
}
395395

@@ -538,8 +538,8 @@ __bit_iterator<_Cp, false>
538538
copy(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
539539
{
540540
if (__first.__ctz_ == __result.__ctz_)
541-
return __copy_aligned(__first, __last, __result);
542-
return __copy_unaligned(__first, __last, __result);
541+
return _VSTD::__copy_aligned(__first, __last, __result);
542+
return _VSTD::__copy_unaligned(__first, __last, __result);
543543
}
544544

545545
// copy_backward
@@ -685,8 +685,8 @@ __bit_iterator<_Cp, false>
685685
copy_backward(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
686686
{
687687
if (__last.__ctz_ == __result.__ctz_)
688-
return __copy_backward_aligned(__first, __last, __result);
689-
return __copy_backward_unaligned(__first, __last, __result);
688+
return _VSTD::__copy_backward_aligned(__first, __last, __result);
689+
return _VSTD::__copy_backward_unaligned(__first, __last, __result);
690690
}
691691

692692
// move
@@ -868,8 +868,8 @@ swap_ranges(__bit_iterator<__C1, false> __first1, __bit_iterator<__C1, false> __
868868
__bit_iterator<__C2, false> __first2)
869869
{
870870
if (__first1.__ctz_ == __first2.__ctz_)
871-
return __swap_ranges_aligned(__first1, __last1, __first2);
872-
return __swap_ranges_unaligned(__first1, __last1, __first2);
871+
return _VSTD::__swap_ranges_aligned(__first1, __last1, __first2);
872+
return _VSTD::__swap_ranges_unaligned(__first1, __last1, __first2);
873873
}
874874

875875
// rotate
@@ -1083,8 +1083,8 @@ bool
10831083
equal(__bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1, __bit_iterator<_Cp, _IC2> __first2)
10841084
{
10851085
if (__first1.__ctz_ == __first2.__ctz_)
1086-
return __equal_aligned(__first1, __last1, __first2);
1087-
return __equal_unaligned(__first1, __last1, __first2);
1086+
return _VSTD::__equal_aligned(__first1, __last1, __first2);
1087+
return _VSTD::__equal_unaligned(__first1, __last1, __first2);
10881088
}
10891089

10901090
template <class _Cp, bool _IsConst,

libcxx/include/__mutex_base

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ condition_variable::wait_until(unique_lock<mutex>& __lk,
418418
if (__t <= __now)
419419
return cv_status::timeout;
420420

421-
__clock_tp_ns __t_ns = __clock_tp_ns(__safe_nanosecond_cast(__t.time_since_epoch()));
421+
__clock_tp_ns __t_ns = __clock_tp_ns(_VSTD::__safe_nanosecond_cast(__t.time_since_epoch()));
422422

423423
__do_timed_wait(__lk, __t_ns);
424424
return _Clock::now() < __t ? cv_status::no_timeout : cv_status::timeout;
@@ -451,13 +451,13 @@ condition_variable::wait_for(unique_lock<mutex>& __lk,
451451

452452
#if defined(_LIBCPP_HAS_COND_CLOCKWAIT)
453453
using __clock_tp_ns = time_point<steady_clock, nanoseconds>;
454-
__ns_rep __now_count_ns = __safe_nanosecond_cast(__c_now.time_since_epoch()).count();
454+
__ns_rep __now_count_ns = _VSTD::__safe_nanosecond_cast(__c_now.time_since_epoch()).count();
455455
#else
456456
using __clock_tp_ns = time_point<system_clock, nanoseconds>;
457-
__ns_rep __now_count_ns = __safe_nanosecond_cast(system_clock::now().time_since_epoch()).count();
457+
__ns_rep __now_count_ns = _VSTD::__safe_nanosecond_cast(system_clock::now().time_since_epoch()).count();
458458
#endif
459459

460-
__ns_rep __d_ns_count = __safe_nanosecond_cast(__d).count();
460+
__ns_rep __d_ns_count = _VSTD::__safe_nanosecond_cast(__d).count();
461461

462462
if (__now_count_ns > numeric_limits<__ns_rep>::max() - __d_ns_count) {
463463
__do_timed_wait(__lk, __clock_tp_ns::max());

0 commit comments

Comments
 (0)