[libcxx] r260337 - Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 10 12:06:35 PST 2016


OK, got the build working. This should be fixed in r260425. Please let
me know if you're still seeing failures.

On Wed, Feb 10, 2016 at 11:59 AM, Richard Smith <richard at metafoo.co.uk> wrote:
> On Wed, Feb 10, 2016 at 10:32 AM, Tim Northover <t.p.northover at gmail.com> wrote:
>> Hi Richard,
>>
>> On 9 February 2016 at 16:59, Richard Smith via cfe-commits
>> <cfe-commits at lists.llvm.org> wrote:
>>> 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 seems to have caused breakage on one of compiler-rt's tests on
>> Darwin: lib/asan/test/asan_str_test.cc if I'm reading the runes
>> correctly. See http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/10117/
>> for example.
>>
>> I'm not quite sure what's going on, but it seems to involve enable_if
>> disabling some overload checks, leading to an inconsistent set of
>> possible functions. That's probably an independent bug in clang
>> (there's certainly no mangling to support it in Itanium), but I
>> suspect libc++ shouldn't be trying to produce such combinations
>> anyway.
>>
>> The smallest test case with the essential Clang details I've found is:
>>
>> char *foo(const char *);
>> char *foo(char *);
>> __attribute__ ((__enable_if__(true, ""))) const char *foo(const char *);
>>
>> void test(char *(*)(const char *));
>> void test(char *(*)(char *));
>>
>> void func(char *in) {
>>   test(&foo);
>> }
>>
>> Do you have any ideas on what to do, because I'm a bit stuck I'm
>> afraid. I can give you preprocessed source if you're struggling to
>> reproduce the issue (it's 2.4MB for the default 7ish for
>> -frewrite-includes).
>
> Thanks for the reduction. I've been trying to reproduce this, but
> compiler-rt won't build for me (apparently something has broken in its
> support for libc++ since I last used it -- it's passing -stdlib=libc++
> to compile actions but not to the link).


More information about the cfe-commits mailing list