From 4dd9f89aa4457f9611aecc473ee8514e6285cd5b Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sun, 18 May 2025 15:10:27 +0300 Subject: [PATCH 1/4] revert `` product code changes in #5516 --- stl/inc/flat_set | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/stl/inc/flat_set b/stl/inc/flat_set index 8000018ed8c..1ec4c6ce049 100644 --- a/stl/inc/flat_set +++ b/stl/inc/flat_set @@ -486,12 +486,9 @@ private: return pair{_Where, false}; } - _Clear_guard _Guard{this}; if constexpr (is_same_v, _Kty>) { _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val)); - iterator _Result = _Mycont.emplace(_Where, _STD forward<_Ty>(_Val)); - _Guard._Target = nullptr; - return pair{_STD move(_Result), true}; + return pair{_Mycont.emplace(_Where, _STD forward<_Ty>(_Val)), true}; } else { // heterogeneous insertion // FIXME: The standard only requires `find(_Val) == find(_Keyval)` (per N4958 [flat.set.modifiers]/2), @@ -501,16 +498,11 @@ private: _STL_ASSERT(_Can_insert(_Where, _Keyval), "The conversion from the heterogeneous key to key_type should " "be consistent with the heterogeneous lookup!"); - iterator _Result = _Mycont.emplace(_Where, _STD move(_Keyval)); - _Guard._Target = nullptr; - return pair{_STD move(_Result), true}; + return pair{_Mycont.emplace(_Where, _STD move(_Keyval)), true}; } } else { _STL_INTERNAL_STATIC_ASSERT(is_same_v, _Kty>); - _Clear_guard _Guard{this}; - iterator _Result = _Mycont.emplace(upper_bound(_Val), _STD forward<_Ty>(_Val)); - _Guard._Target = nullptr; - return _Result; + return _Mycont.emplace(upper_bound(_Val), _STD forward<_Ty>(_Val)); } } @@ -538,12 +530,9 @@ private: return _Where; } - _Clear_guard _Guard{this}; if constexpr (is_same_v, _Kty>) { _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val)); - iterator _Result = _Mycont.emplace(_Where, _STD forward<_Ty>(_Val)); - _Guard._Target = nullptr; - return _Result; + return _Mycont.emplace(_Where, _STD forward<_Ty>(_Val)); } else { // heterogeneous insertion // FIXME: The standard only requires `find(_Val) == find(_Keyval)` (per N4958 [flat.set.modifiers]/2), @@ -553,9 +542,7 @@ private: _STL_ASSERT(_Can_insert(_Where, _Keyval), "The conversion from the heterogeneous key to key_type should " "be consistent with the heterogeneous lookup!"); - iterator _Result = _Mycont.emplace(_Where, _STD move(_Keyval)); - _Guard._Target = nullptr; - return _Result; + return _Mycont.emplace(_Where, _STD move(_Keyval)); } } else { _STL_INTERNAL_STATIC_ASSERT(is_same_v, _Kty>); @@ -575,10 +562,7 @@ private: } _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val)); - _Clear_guard _Guard{this}; - iterator _Result = _Mycont.emplace(_Where, _STD forward<_Ty>(_Val)); - _Guard._Target = nullptr; - return _Result; + return _Mycont.emplace(_Where, _STD forward<_Ty>(_Val)); } } From 2882d4f18341a7828e5ce1d14361fbd18b116cb5 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sun, 18 May 2025 15:11:00 +0300 Subject: [PATCH 2/4] Add skipped tests, but now with LLVM issue --- tests/libcxx/expected_results.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 7cd1b5cc8ab..19591822de7 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -51,6 +51,15 @@ std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cp std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:0 FAIL std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:1 FAIL +# LLVM-140448: [libc++][test] flat_set std test uses EmplaceUnsafeContainer which is non-standard +std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace_hint.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_cv.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_iter_cv.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_iter_rv.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_rv.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_transparent.pass.cpp FAIL + # Non-Standard regex behavior. # "It seems likely that the test is still non-conforming due to how libc++ handles the 'w' character class." std/re/re.traits/lookup_classname.pass.cpp FAIL From a7c38a50dab135546fa704307d02f0da76ec02b4 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sun, 18 May 2025 15:13:00 +0300 Subject: [PATCH 3/4] also move LLVM-140287: failures --- tests/libcxx/expected_results.txt | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 19591822de7..86bb100a901 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -51,6 +51,14 @@ std/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cp std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:0 FAIL std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:1 FAIL +# LLVM-140287: libc++ test: update MinSequenceContainer.h to make some tests pass on MSVC STL #140287 +std/containers/container.adaptors/flat.multiset/flat.multiset.capacity/empty.pass.cpp FAIL +std/containers/container.adaptors/flat.multiset/flat.multiset.cons/assign_initializer_list.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.capacity/empty.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.cons/assign_initializer_list.pass.cpp FAIL +std/containers/container.adaptors/flat.multiset/flat.multiset.modifiers/insert_range.pass.cpp FAIL +std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_range.pass.cpp FAIL + # LLVM-140448: [libc++][test] flat_set std test uses EmplaceUnsafeContainer which is non-standard std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace_hint.pass.cpp FAIL std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace.pass.cpp FAIL @@ -618,20 +626,6 @@ std/depr/depr.c.headers/stddef_h.compile.pass.cpp:1 FAIL # *** LIKELY BOGUS TESTS *** -# P1222R4 ; -# error: no member named 'assign' in 'MinSequenceContainer'; -# it is mandatory according to [sequence.reqmts]/104 -std/containers/container.adaptors/flat.multiset/flat.multiset.capacity/empty.pass.cpp FAIL -std/containers/container.adaptors/flat.multiset/flat.multiset.cons/assign_initializer_list.pass.cpp FAIL -std/containers/container.adaptors/flat.set/flat.set.capacity/empty.pass.cpp FAIL -std/containers/container.adaptors/flat.set/flat.set.cons/assign_initializer_list.pass.cpp FAIL - -# P1222R4 ; -# error: no member named 'insert_range' in 'MinSequenceContainer'; -# it is mandatory according to [sequence.reqmts]/40 -std/containers/container.adaptors/flat.multiset/flat.multiset.modifiers/insert_range.pass.cpp FAIL -std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_range.pass.cpp FAIL - # Test bug after LWG-2899 "is_(nothrow_)move_constructible and tuple, optional and unique_ptr" was accepted. std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.pass.cpp FAIL std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp FAIL From 5603a91562e6bc9f78038ea9b6e69b6cfbd84e01 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sun, 18 May 2025 15:28:20 +0300 Subject: [PATCH 4/4] formatting --- tests/libcxx/expected_results.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 86bb100a901..3cbfcfa4544 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -59,7 +59,7 @@ std/containers/container.adaptors/flat.set/flat.set.cons/assign_initializer_list std/containers/container.adaptors/flat.multiset/flat.multiset.modifiers/insert_range.pass.cpp FAIL std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_range.pass.cpp FAIL -# LLVM-140448: [libc++][test] flat_set std test uses EmplaceUnsafeContainer which is non-standard +# LLVM-140448: [libc++][test] flat_set std test uses EmplaceUnsafeContainer which is non-standard std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace_hint.pass.cpp FAIL std/containers/container.adaptors/flat.set/flat.set.modifiers/emplace.pass.cpp FAIL std/containers/container.adaptors/flat.set/flat.set.modifiers/insert_cv.pass.cpp FAIL