[libcxx] r260337 - Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 11 11:28:32 PST 2016
Argh, the glibc folks broke their string.h and wchar.h prototypes in
this commit:
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=8e2e833ac4d6509b152d6b8d74d388725717c56f
On Thu, Feb 11, 2016 at 11:02 AM, Ismail Donmez <ismail at i10z.com> wrote:
> Hi,
>
> On Wed, Feb 10, 2016 at 2:59 AM, Richard Smith via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>> Author: rsmith
>> Date: Tue Feb 9 18:59:02 2016
>> New Revision: 260337
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=260337&view=rev
>> Log:
>> Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from
>> <string.h> and wcschr, wcspbrk, wcsrchr, wmemchr, and wcsstr from <wchar.h> to
>> provide a const-correct overload set even when the underlying C library does
>> not.
>>
>> This change adds a new macro, _LIBCPP_PREFERRED_OVERLOAD, which (if defined)
>> specifies that a given overload is a better match than an otherwise equally
>> good function declaration without the overload. This is implemented in modern
>> versions of Clang via __attribute__((enable_if)), and not elsewhere.
>>
>> We use this new macro to define overloads in the global namespace for these
>> functions that displace the overloads provided by the C library, unless we
>> believe the C library is already providing the correct signatures.
>>
>> Added:
>> libcxx/trunk/include/string.h
>> - copied, changed from r251642, libcxx/trunk/include/string.h
>> Modified:
>> libcxx/trunk/include/__config
>> libcxx/trunk/include/cstring
>> libcxx/trunk/include/cwchar
>> libcxx/trunk/include/wchar.h
>> libcxx/trunk/test/std/depr/depr.c.headers/string_h.pass.cpp
>> libcxx/trunk/test/std/depr/depr.c.headers/wchar_h.pass.cpp
>> libcxx/trunk/test/std/strings/c.strings/cstring.pass.cpp
>> libcxx/trunk/test/std/strings/c.strings/cwchar.pass.cpp
>
> Fails on Linux x86-64 with glibc 2.22:
>
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp:55:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(strchr(cpc, 0)), const
> char*>::value), "");
> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp:56:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(strpbrk(cpc, cpc)), const
> char*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp:57:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(strrchr(cpc, 0)), const
> char*>::value), "");
> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp:58:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(strstr(cpc, cpc)), const
> char*>::value), "");
> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp:59:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(memchr(vpc, 0, s)), const
> void*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 5 errors generated.
>
>
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/strings/c.strings/cstring.pass.cpp:55:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(std::memchr(vpc, 0, s)),
> const void*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/strings/c.strings/cstring.pass.cpp:56:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(std::strchr(cpc, 0)), const
> char*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/strings/c.strings/cstring.pass.cpp:57:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(std::strpbrk(cpc, cpc)),
> const char*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/strings/c.strings/cstring.pass.cpp:58:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(std::strrchr(cpc, 0)), const
> char*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/abuild/rpmbuild/BUILD/llvm/projects/libcxx/test/std/strings/c.strings/cstring.pass.cpp:59:5:
> error: static_assert failed ""
> static_assert((std::is_same<decltype(std::strstr(cpc, cpc)), const
> char*>::value), "");
> ^
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 5 errors generated.
More information about the cfe-commits
mailing list