[libcxx-commits] [PATCH] D92776: [libc++] ADL-proof <algorithm> by adding _VSTD:: qualification on calls.
Arthur O'Dwyer via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 7 10:30:44 PST 2020
Quuxplusone created this revision.
Quuxplusone added a reviewer: ldionne.
Quuxplusone added a project: libc++.
Quuxplusone requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: libcxx-commits, sstefan1.
Herald added a reviewer: libc++.
I intend to land this PR as two separate commits:
(1) [libc++] ADL-proof by adding _VSTD:: qualifications to memmove etc.
Many of these calls aren't vulnerable to ADL because they involve only
primitive types; but some (such as the ones in <list>) *are* vulnerable,
and absolutely zero of them *need* ADL to happen; so in my opinion
they should all be consistently qualified, just like calls to any
other (non-user-customizable) functions in namespace std.
The following names are covered by this patch:
memmove, wmemmove, memcpy, wmemcpy, memcmp, wmemcmp, memchr, wmemchr, strcmp, strlen, wcslen
I checked the following names but these aren't actually called anywhere:
strcpy, strncpy, strncmp, wcscmp
I didn't touch these headers:
<ext/__hash> uses strlen, safely
<support/ibm/locale_mgmt_aix.h> uses memcpy, safely
<string.h> uses memchr and strchr, safely
<wchar.h> uses wcschr, safely
<__bsd_locale_fallbacks.h> uses wcsnrtombs, safely
(2) [libc++] Add _VSTD:: qualifications to ADL-proof <algorithm>.
Relevant blog post: https://quuxplusone.github.io/blog/2019/09/26/uglification-doesnt-stop-adl/
@ldionne: In the <algorithm> commit, I noticed that there are several places where otherwise-well-formed code has been commented out; e.g. look at the codepath in `__nth_element` following `not_sorted:`. The commented-out stuff dates back to @howard.hinnant's initial commit. Can I just remove the commented-out stuff, in a separate "NFC" commit?
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D92776
Files:
libcxx/include/__hash_table
libcxx/include/__locale
libcxx/include/__string
libcxx/include/algorithm
libcxx/include/atomic
libcxx/include/charconv
libcxx/include/fstream
libcxx/include/iterator
libcxx/include/list
libcxx/include/locale
libcxx/include/string
libcxx/include/strstream
libcxx/include/vector
libcxx/test/std/algorithms/robust_against_adl.pass.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92776.309947.patch
Type: text/x-patch
Size: 56702 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20201207/e74f8ace/attachment-0001.bin>
More information about the libcxx-commits
mailing list