[libcxx] r299734 - Allow a standard library to implement conditional noexcept for optional and unique_ptr hash functions.

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 6 23:10:06 PDT 2017


I reverted r299734 in r299744. Feel free to recommit it once the test is fixed.

> On Apr 6, 2017, at 10:36 PM, Akira Hatanaka via cfe-commits <cfe-commits at lists.llvm.org> wrote:
> 
> It looks like this commit and r299735 are causing bots to fail:
> 
> http://green.lab.llvm.org/green/job/libcxx_master_cmake_32/66/ <http://green.lab.llvm.org/green/job/libcxx_master_cmake_32/66/>
> 
> The test hash_unique_ptr.pass.cpp doesn’t compile when -std=c++03 is on the command line because PointerDeleter defined in deleter_types.h is guarded with "TEST_STD_VER >= 11”.
> 
>> On Apr 6, 2017, at 4:50 PM, Billy Robert O'Neal III via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>> 
>> Author: bion
>> Date: Thu Apr  6 18:50:21 2017
>> New Revision: 299734
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=299734&view=rev <http://llvm.org/viewvc/llvm-project?rev=299734&view=rev>
>> Log:
>> Allow a standard library to implement conditional noexcept for optional and unique_ptr hash functions.
>> 
>> These tests were unconditionally asserting that optional and unique_ptr declare throwing hashes, but MSVC++ implements conditional noexcept forwarding that of the underlying hash function. As a result we were failing these tests but there's nothing forbidding strengthening noexcept in that way.
>> 
>> Changed the ASSERT_NOT_NOEXCEPT asserts to use types which themselves have non-noexcept hash functions.
>> 
>> Modified:
>>    libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
>>    libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp
>> 
>> Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp?rev=299734&r1=299733&r2=299734&view=diff <http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp?rev=299734&r1=299733&r2=299734&view=diff>
>> ==============================================================================
>> --- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp (original)
>> +++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp Thu Apr  6 18:50:21 2017
>> @@ -67,10 +67,14 @@ int main()
>>     int* ptr = new int;
>>     std::unique_ptr<int> p(ptr);
>>     std::hash<std::unique_ptr<int> > f;
>> -    ASSERT_NOT_NOEXCEPT(f(p));
>>     std::size_t h = f(p);
>>     assert(h == std::hash<int*>()(ptr));
>>   }
>> +  {
>> +    std::unique_ptr<int, PointerDeleter<int, 1>> pThrowingHash;
>> +    std::hash<std::unique_ptr<int, PointerDeleter<int, 1>>> fThrowingHash;
>> +    ASSERT_NOT_NOEXCEPT(fThrowingHash(pThrowingHash));
>> +  }
>> #if TEST_STD_VER >= 11
>>   {
>>     test_enabled_with_deleter<int, Deleter<int>>();
>> 
>> Modified: libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp?rev=299734&r1=299733&r2=299734&view=diff <http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp?rev=299734&r1=299733&r2=299734&view=diff>
>> ==============================================================================
>> --- libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp (original)
>> +++ libcxx/trunk/test/std/utilities/optional/optional.hash/hash.pass.cpp Thu Apr  6 18:50:21 2017
>> @@ -38,9 +38,14 @@ int main()
>>         std::hash<optional<double>>{}(optional<double>{});
>> 
>>     {
>> +        optional<B> opt;
>> +        ASSERT_NOT_NOEXCEPT(std::hash<optional<B>>()(opt));
>> +        ASSERT_NOT_NOEXCEPT(std::hash<optional<const B>>()(opt));
>> +    }
>> +
>> +    {
>>         typedef int T;
>>         optional<T> opt;
>> -        ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
>>         assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
>>         opt = 2;
>>         assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
>> @@ -48,7 +53,6 @@ int main()
>>     {
>>         typedef std::string T;
>>         optional<T> opt;
>> -        ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
>>         assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
>>         opt = std::string("123");
>>         assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
>> @@ -56,7 +60,6 @@ int main()
>>     {
>>         typedef std::unique_ptr<int> T;
>>         optional<T> opt;
>> -        ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
>>         assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
>>         opt = std::unique_ptr<int>(new int(3));
>>         assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170406/8a10b2ec/attachment.html>


More information about the cfe-commits mailing list