Skip to content

Q3 2022 priorities #2847

Description

In the third quarter of 2022, our priorities are:

  • Implementing the C++23 features that have been accepted so far (more will be added during the July 25 plenary meeting)
    • Implementing P2465R3 Standard Library Modules (approved by LEWG, LWG, CWG, next step is plenary approval)
    • We also expect P2502R2 generator to be accepted soon, so we may look into implementing it
  • Reviewing the PR backlog
    • We've made great progress here - from a peak of 80 PRs during Q1, to 55-70 during Q2, to ~30 right now 📉 😸
  • Now that we've merged [benchmark] add gbenchmark #2780 adding Google Benchmark support and a first benchmark for std::copy[_n], we'll look into porting more benchmarks, e.g. from libcxx's test suite.

We could use some help with reporting and fixing libcxx test issues upstream - e.g. see the list of "likely bogus tests" with short explanations at:

# *** LIKELY BOGUS TESTS ***
# pass lambda without noexcept to barrier
std/thread/thread.barrier/completion.pass.cpp FAIL
std/thread/thread.barrier/max.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
std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.single.pass.cpp FAIL
std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move.pass.cpp FAIL
# Test bug after LWG-3257 "Missing feature testing macro update from P0858" was accepted.
std/language.support/support.limits/support.limits.general/string.version.pass.cpp FAIL
# Not yet analyzed, likely bogus tests. Appears to be timing assumptions.
std/atomics/atomics.types.operations/atomics.types.operations.wait/atomic_notify_all.pass.cpp SKIPPED
std/thread/futures/futures.async/async.pass.cpp SKIPPED
std/thread/futures/futures.shared_future/get.pass.cpp SKIPPED
std/thread/futures/futures.shared_future/wait.pass.cpp SKIPPED
std/thread/futures/futures.shared_future/wait_for.pass.cpp SKIPPED
std/thread/futures/futures.shared_future/wait_until.pass.cpp SKIPPED
std/thread/futures/futures.unique_future/get.pass.cpp SKIPPED
std/thread/futures/futures.unique_future/wait.pass.cpp SKIPPED
std/thread/futures/futures.unique_future/wait_for.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp SKIPPED
std/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.guard/adopt_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.guard/mutex.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp SKIPPED
std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock_shared.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock_shared.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.shared_mutex.requirements/thread.shared_mutex.class/try_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp SKIPPED
std/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp SKIPPED
std/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp SKIPPED
std/thread/thread.threads/thread.thread.class/thread.thread.member/detach.pass.cpp SKIPPED
std/thread/thread.threads/thread.thread.this/sleep_until.pass.cpp SKIPPED
# Not yet analyzed, likely bogus tests. Various assertions, probably POSIX assumptions.
std/diagnostics/syserr/syserr.compare/eq_error_code_error_code.pass.cpp FAIL
std/diagnostics/syserr/syserr.errcat/syserr.errcat.derived/message.pass.cpp FAIL
std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_const_char_pointer.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_const_char_pointer.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp FAIL
std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category.pass.cpp FAIL
# libc++ disagrees with libstdc++ and MSVC on whether setstate calls during I/O that throw set failbit; see open issue LWG-2349
std/input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size_chart.pass.cpp FAIL
std/input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size.pass.cpp FAIL
# Sensitive to implementation details. Assertion failed: test_alloc_base::count == expected_num_allocs
std/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp FAIL
# Comment: "Test C99 compound literal."
# Code: `(int[]){3, 4}`
# error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax
std/containers/sequences/array/array.creation/to_array.pass.cpp:0 FAIL
# Tests emit warning C4244: 'argument': conversion from 'T' to 'const std::complex<double>::_Ty', possible loss of data
std/numerics/complex.number/cmplx.over/conj.pass.cpp:0 FAIL
std/numerics/complex.number/cmplx.over/pow.pass.cpp:0 FAIL
std/numerics/complex.number/cmplx.over/proj.pass.cpp:0 FAIL
# Assertion failed: c == NaN || c == non_zero_nan
# Testing input values outside the range of [complex.value.ops]/9
# libc++ handles those input values differently
std/numerics/complex.number/complex.value.ops/polar.pass.cpp FAIL
# Assertion failed: std::abs(skew - x_skew) < 0.01
# Random number generation test with too strict pass criteria (test8 failure probability ~= 0.04)
std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp FAIL
# Assertion failed: std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001
# Random number generation test with too strict pass criteria (test6 failure probability > 0.2)
std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp FAIL
std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp FAIL
# Assertion failed: invalid min and max arguments for uniform_real
# `param_type p(5);` is a precondition violation.
std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_ctor.pass.cpp FAIL
# Assertion failed: invalid beta argument for gamma_distribution
# test4() constructs a negative_binomial_distribution from (40, 1); [rand.dist.bern.negbin] says p == 1 generates undefined probabilities.
std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp FAIL
# Assertion failed: (std::lerp(T(2.3), T(2.3), inf) == T(2.3))
# Asserts `(std::lerp(T(2.3), T(2.3), inf) == T(2.3))` and `std::isnan(std::lerp(T( 0), T( 0), inf))`
# They shouldn't behave differently. Both of them should probably return NaN.
std/numerics/c.math/lerp.pass.cpp FAIL
# --month{14} should be 1, not 13 as the test expects
std/utilities/time/time.cal/time.cal.month/time.cal.month.members/decrement.pass.cpp FAIL
# conversion from '__int64' to 'long', possible loss of data
std/utilities/time/time.hms/time.hms.members/seconds.pass.cpp:0 FAIL
std/utilities/time/time.hms/time.hms.members/subseconds.pass.cpp:0 FAIL
# Bogus test passes a class type as the second argument to std::advance
std/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp FAIL
# Non-Standard assumption that std::filesystem::file_time_type::duration::period is std::nano
std/input.output/filesystems/fs.filesystem.synopsis/file_time_type_resolution.compile.pass.cpp FAIL
# P1614R2 "Adding Spaceship <=> To The Library" makes `std::operator!=(i1, i3)` an error
std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/equal.pass.cpp FAIL
# Uses-allocator class constructor wants non-const allocator ref and mismatched piecewise_construct's value category
std/utilities/allocator.adaptor/allocator.adaptor.members/construct.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_const_lvalue_pair.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_piecewise.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_rvalue.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_pair_values.pass.cpp FAIL
std/utilities/allocator.adaptor/allocator.adaptor.members/construct_type.pass.cpp FAIL
# Tests ignore the return value of sto{meow}, triggering nodiscard warnings
std/strings/string.conversions/stod.pass.cpp FAIL
std/strings/string.conversions/stof.pass.cpp FAIL
std/strings/string.conversions/stoi.pass.cpp FAIL
std/strings/string.conversions/stol.pass.cpp FAIL
std/strings/string.conversions/stold.pass.cpp FAIL
std/strings/string.conversions/stoll.pass.cpp FAIL
std/strings/string.conversions/stoul.pass.cpp FAIL
std/strings/string.conversions/stoull.pass.cpp FAIL
# We define __cpp_lib_has_unique_object_representations in C++17 mode; test error says it
# "should not be defined when TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 is not defined!"
std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp:1 FAIL
# Tests expect __cpp_lib_ranges to have the old value 201811L for P0896R4; we define the C++20 value 201911L for P1716R3.
std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp FAIL
std/language.support/support.limits/support.limits.general/functional.version.pass.cpp FAIL
std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp FAIL
# Test expects __cpp_lib_chrono to have the old value 201611L for P0505R0; we define the C++20 value 201907L for P1466R3.
std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp FAIL
# We unconditionally define __cpp_lib_addressof_constexpr; test error says it
# "should not be defined when TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700 is not defined!"
std/language.support/support.limits/support.limits.general/memory.version.pass.cpp FAIL
# libc++ doesn't implement P2231R1 Add further constexpr support for optional/variant
std/language.support/support.limits/support.limits.general/variant.version.pass.cpp FAIL
# Tests non-portable behavior
std/utilities/format/format.formatter/format.context/format.context/advance_to.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.context/arg.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.context/ctor.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.context/locale.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.context/out.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.bool.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.c_string.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.char.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.const_char_array.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.signed_integral.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.string.pass.cpp FAIL
std/utilities/format/format.formatter/format.context/format.formatter.spec/formatter.unsigned_integral.pass.cpp FAIL
# libc++ doesn't yet implement P2216R3 (test uses non-constant-expression format strings)
std/utilities/format/format.functions/format.pass.cpp FAIL
std/utilities/format/format.functions/format.locale.pass.cpp FAIL
std/utilities/format/format.functions/format_to.locale.pass.cpp FAIL
std/utilities/format/format.functions/format_to.pass.cpp FAIL
std/utilities/format/format.functions/format_to_n.pass.cpp FAIL
std/utilities/format/format.functions/format_to_n.locale.pass.cpp FAIL
std/utilities/format/format.functions/formatted_size.pass.cpp FAIL
std/utilities/format/format.functions/formatted_size.locale.pass.cpp FAIL
std/utilities/format/format.functions/locale-specific_form.pass.cpp FAIL
# libc++ chose option A for [time.clock.file.members], and we chose option B.
std/utilities/time/time.clock/time.clock.file/to_from_sys.pass.cpp FAIL
# libc++ is missing various Ranges DRs
std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp FAIL
# test compares singular and non-singular string iterators
std/strings/basic.string/string.iterators/iterators.pass.cpp FAIL
# test compares iterators into distinct `array`s
std/ranges/range.adaptors/range.all/range.owning.view/begin_end.pass.cpp FAIL
# libc++ allows some forbidden unique_ptr conversions
std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y.pass.cpp FAIL
std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp FAIL
# non-portable test of strengthened noexcept
std/ranges/range.adaptors/range.drop/ctor.default.pass.cpp FAIL
std/ranges/range.adaptors/range.transform/iterator/subscript.pass.cpp FAIL
std/ranges/range.utility/view.interface/view.interface.pass.cpp FAIL
# tests invalid range
std/utilities/memory/specialized.algorithms/uninitialized.copy/ranges_uninitialized_copy.pass.cpp SKIPPED
std/utilities/memory/specialized.algorithms/uninitialized.move/ranges_uninitialized_move.pass.cpp SKIPPED
# Narrowing conversion
std/utilities/memory/specialized.algorithms/uninitialized.copy/ranges_uninitialized_copy_n.pass.cpp:0 FAIL
std/utilities/memory/specialized.algorithms/uninitialized.move/ranges_uninitialized_move_n.pass.cpp:0 FAIL
# <charconv> test defines std::_Bit_cast, which we already have
std/utilities/charconv/charconv.msvc/test.pass.cpp FAIL
# libc++ doesn't yet implement LWG-3533
std/ranges/range.adaptors/range.transform/end.pass.cpp FAIL
std/ranges/range.adaptors/range.transform/iterator/base.pass.cpp FAIL
# MaybePOCCAAllocator doesn't meet the allocator requirements
std/containers/sequences/vector/vector.cons/assign_copy.pass.cpp FAIL
# Mismatching allocator value_type
std/containers/sequences/vector.bool/get_allocator.pass.cpp FAIL
# Test annotated "XFAIL: msvc" should be "XFAIL: msvc && stdlib=libc++"
std/language.support/support.dynamic/alloc.errors/set.new.handler/get_new_handler.pass.cpp SKIPPED
std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_move.pass.cpp SKIPPED
# compares iterators from distinct transform_views
std/ranges/range.adaptors/range.transform/iterator/plus_minus.pass.cpp FAIL
# MoveOnlyForwardIterator (a misnomer) has mixed-type comparisons and conversions
std/ranges/range.utility/range.subrange/primitives.pass.cpp:0 FAIL
# libc++ speculatively implements LWG-3645
std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp FAIL
# libc++ is missing various <format> DRs
std/language.support/support.limits/support.limits.general/format.version.pass.cpp FAIL
# We speculatively implement LWG-3670
std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp FAIL
(Once fixed upstream, we can update the STL repo's llvm-project submodule to pick up the fixes.)

If you have questions about our plans for this quarter, feel free to ask them here. (Note that compiler, IDE, etc. priorities are off-topic.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    announcementAnnouncements related to the repo

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions