lebedev.ri created this revision. lebedev.ri added reviewers: mclow.lists, EricWF.
https://reviews.llvm.org/D44883 extends -Wself-assign to also work on C++ classes. These new warnings pop up in the test suite, so they have to be silenced. Please refer to the https://reviews.llvm.org/D45082 for disscussion on whether this is the right way to solve this. Testing: `ninja check-libcxx check-libcxxabi` in stage-2 build. Repository: rCXX libc++ https://reviews.llvm.org/D45128 Files: test/std/language.support/support.types/byteops/and.assign.pass.cpp test/std/language.support/support.types/byteops/or.assign.pass.cpp test/std/language.support/support.types/byteops/xor.assign.pass.cpp test/std/utilities/any/any.class/any.assign/copy.pass.cpp test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp
Index: test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp =================================================================== --- test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp +++ test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp @@ -92,28 +92,28 @@ { typedef std::function<int()> Func; Func f = g0; - Func& fr = (f = f); + Func& fr = (f = (Func &)f); assert(&fr == &f); assert(*f.target<int(*)()>() == g0); } { typedef std::function<int(int)> Func; Func f = g; - Func& fr = (f = f); + Func& fr = (f = (Func &)f); assert(&fr == &f); assert(*f.target<int(*)(int)>() == g); } { typedef std::function<int(int, int)> Func; Func f = g2; - Func& fr = (f = f); + Func& fr = (f = (Func &)f); assert(&fr == &f); assert(*f.target<int(*)(int, int)>() == g2); } { typedef std::function<int(int, int, int)> Func; Func f = g3; - Func& fr = (f = f); + Func& fr = (f = (Func &)f); assert(&fr == &f); assert(*f.target<int(*)(int, int, int)>() == g3); } Index: test/std/utilities/any/any.class/any.assign/copy.pass.cpp =================================================================== --- test/std/utilities/any/any.class/any.assign/copy.pass.cpp +++ test/std/utilities/any/any.class/any.assign/copy.pass.cpp @@ -102,7 +102,7 @@ // empty { any a; - a = a; + a = (any &)a; assertEmpty(a); assert(globalMemCounter.checkOutstandingNewEq(0)); } @@ -112,7 +112,7 @@ any a((small(1))); assert(small::count == 1); - a = a; + a = (any &)a; assert(small::count == 1); assertContains<small>(a, 1); @@ -125,7 +125,7 @@ any a(large(1)); assert(large::count == 1); - a = a; + a = (any &)a; assert(large::count == 1); assertContains<large>(a, 1); Index: test/std/language.support/support.types/byteops/xor.assign.pass.cpp =================================================================== --- test/std/language.support/support.types/byteops/xor.assign.pass.cpp +++ test/std/language.support/support.types/byteops/xor.assign.pass.cpp @@ -27,7 +27,7 @@ constexpr std::byte b8{static_cast<std::byte>(8)}; constexpr std::byte b9{static_cast<std::byte>(9)}; - static_assert(noexcept(b ^= b), "" ); + static_assert(noexcept(b ^= (std::byte &)b), "" ); static_assert(std::to_integer<int>(test(b1, b8)) == 9, ""); static_assert(std::to_integer<int>(test(b1, b9)) == 8, ""); Index: test/std/language.support/support.types/byteops/or.assign.pass.cpp =================================================================== --- test/std/language.support/support.types/byteops/or.assign.pass.cpp +++ test/std/language.support/support.types/byteops/or.assign.pass.cpp @@ -27,7 +27,7 @@ constexpr std::byte b2{static_cast<std::byte>(2)}; constexpr std::byte b8{static_cast<std::byte>(8)}; - static_assert(noexcept(b |= b), "" ); + static_assert(noexcept(b |= (std::byte &)b), "" ); static_assert(std::to_integer<int>(test(b1, b2)) == 3, ""); static_assert(std::to_integer<int>(test(b1, b8)) == 9, ""); Index: test/std/language.support/support.types/byteops/and.assign.pass.cpp =================================================================== --- test/std/language.support/support.types/byteops/and.assign.pass.cpp +++ test/std/language.support/support.types/byteops/and.assign.pass.cpp @@ -27,7 +27,7 @@ constexpr std::byte b8{static_cast<std::byte>(8)}; constexpr std::byte b9{static_cast<std::byte>(9)}; - static_assert(noexcept(b &= b), "" ); + static_assert(noexcept(b &= (std::byte &)b), "" ); static_assert(std::to_integer<int>(test(b1, b8)) == 0, ""); static_assert(std::to_integer<int>(test(b1, b9)) == 1, "");
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits