Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release candidate for 3.21.12 #510

Merged
merged 5 commits into from
Jun 9, 2023
Merged

Conversation

jhopkins-ea
Copy link
Contributor

@jhopkins-ea jhopkins-ea commented Jun 9, 2023

Changes:

  • Add return type / value for some deque::insert() overloads that were missing a return.
  • Fix issues compiling when EASTL_SIZE_T_32BIT is set to 1.
  • Add a const to an operator to comply with P2468R2.
  • Remove explicit copy constructor/assignment from eastl::bitvector so we don't inhibit move constructor/assignment.
  • Added a test to see that we can now move eastl::bitvector.
  • Remove various unused variables from variant to remove warnings.
  • Add vector_map<Key, T>::at_key() overloads as the inherited vector<pair<const Key, T>>::at() function doesn't have the correct semantics and returns the incorrect type (pair<const Key, T>& rather than T).
  • Add hash_map natvis for key/value visualization.
  • Improve correctness of hashtable internals - remove internal hashtable::DoInsertKey overload with key_type&&, which accessed keys after being move-d, which is in general unspecified behaviour.
  • Make deque::insert(position, first, last) compilable for input (single pass) iterators.
  • Add is_partitioned and partition_point to algorithms.h.
  • Ensure n > 0 before calling memcmp() in char_trait's Compare() and lexicographical_compare() to avoid undefined behaviour.
  • Ensure n > 0 before calling memmove() in copy_backward() or move_backward() to avoid undefined behaviour.
  • Ensure first != last before calling memcpy() in uninitialized_relocate_start() (which is deprecated) to avoid undefined behaviour.
  • Make tuple default constructible when an element type has no member types (which tuple has an empty base optimization for).
  • Ensure n > 0 before calling memmove() in basic_string::assign(); flagged by UBSan.
  • Remove user provided implementation of copy/move assignment operators for eastl::pair so it can be trivially copied if the template parameters are trivially copyable.
  • Added printf format specifiers for use with eastl_size_t that work with both 32- and 64-bit sizes.
  • UBSAN fixes. Remove some unecessary invalid casting in rb_tree.
  • Change some tests to avoid doing nullptr arithmetic, which is undefined behaviour.
  • Change random_shuffle so it doesn't overrun the iterator when first == last.
  • Change tim_sort_buffer so it doesn't invoke undefined behaviour when called on empty vectors.
  • Change radix_sort_impl so it doesn't over-right-shifts on it's last loop when trying to write to the histogram.
  • Change shell_sort so it doesn't overrun the iterator in the loop increment expression.
  • Use aligned allocations in EASTLTestAllocator to avoid allocating missaligned memory on platfroms require larger alignment restrictions for operator new.
  • Make list_map_iterator::mpNode private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type list_map_data_base but isn't a list_map_data<T>. No replacement accessor has been provided as mpNode is an internal impelmentation detail that isn't useful for users.
  • Make rbtree_iterator::mpNode private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type rbtree_node_base but isn't a rbtree_node<T>. No replacement accessor has been provided as mpNode is an internal impelmentation detail that isn't useful for users.
  • Add natvis support for atomic<T>.
  • Make intrusive_list_iterator::mpNode private and change its type to avoid various insances of undefined behaviour when downcasting the anchor node, which is has type intrusive_list_node but isn't a T. A helper function nodePtr() has been provided, which is equivalent to accessing the old member directly.
  • Update is_pod's implementation on clang-cl to no longer use the compiler builtin __has_trivial_constructor that is deprecated in latest version of clang.
  • Change the type of ListIterator<T>::mpNode from ListNode<T>* to ListNodeBase* to avoid various instances of undefined behaviour when downcasting the anchor node which is a ListNodeBase but not a ListNode<T>.
  • Change the type of SListIterator<T>::mpNode from SListNode<T>* to SListNodeBase* to avoid various instances of undefined behaviour when downcasting the anchor node which is an SListNodeBase but not a SListNode<T>.
  • Remove EASTL_LIST_PROXY_ENABLED, there's no configuration in which it is enabled and enabling it explicitly causes compile errors that we're not interested in fixing.
  • extract_signature_from_callable compiler fix for C++14.
  • Remove uses of compiler builtins that are deprecated in latest version of clang.
  • Added hash function to eastl::fixed_string
  • fix compile error for uninitialized_copy for trivially copyable types that are not assignable.
  • Removed unqualified name lookup for invoke in apply to prevent any ambiguity with other invoke functions.
  • Fixed warning about uninitialised base class in estl::optional copy constructor
  • Added deduction guides for function.
  • Re-add string_view symmetric comparisons (relational operators).
  • Fix "#pragma warning(pop): likely mismatch, popping warning state pushed in different file" warning generated by atomic_push_compiler_optins.h header.
  • Reduce vector_set, vector_multiset, vector_map and vector_multimap's size when the Compare template parameter is an empty class.
  • Fix tuple_cat for calls with l-values and for calls with less than two arguments.
  • Remove non-standard array<T, N> behaviour: array<T, 0> no longer has size() == 1. Deprecate count enumerator.
  • rotate(), uninitialized_copy() + deque optimizations: apply memmove/memcopy optimizations using the correct type trait, is_trivially_copyable<T>.
  • Add structured binding support for array<T, N>.
  • Disable EXPECT_ASSERT for windows-clang when exceptions are disabled to fix compile break.

Deprecations:

  • Aligning with the standard
    • EASTL_DECLARE macros - assert that the type trait is true instead of overriding EASTL's definition.
      Note: compile warnings / errors generated will be on the usage of the type declared to have the trait.
      The correct fix is to remove the EASTL_DECLARE usage, not the usage of the type itself.
    • add_(un)signed - use make_(un)signed instead.
    • identity - use type_identity(_t) instead.
    • equal_to_2, not_equal_to_2, less_2 - instead use equal_to<>, not_equal_to<> and less<> respectively.
    • unary_compose, binary_compose - use a lambda instead.
    • add_reference - use add_lvalue_reference(_t) instead.
    • is_array_of_(un)known_bounds - use is_(un)bounded_array.
    • type_select - use conditional.
    • type_and, type_or, type_equal, type_not_equal, type_not - use bool_constant<(expression)> instead.
    • identity - use type_identity instead.
    • has_trivial_constructor - use is_trivially_default_constructible instead.
    • has_trivial_copy - use is_trivially_copy_constructible instead.
    • has_trivial_assign - use is_trivially_assignable, is_trivially_move_assignable or is_trivially_copy_assignable instead.
    • has_trivial_destructor - use is_trivially_destructible instead.
    • has_trivial_relocate - use is_trivially_copyable instead.
    • has_nothrow_constructor - use is_nothrow_constructible instead.
    • has_nothrow_copy - use is_nothrow_copy_constructible instead.
    • has_nothrow_assign - use is_nothrow_assignable instead.
    • uninitialized_relocate_start, uninitialized_relocate_commit, uninitialized_relocate_abort, uninitialized_relocate - pre-C++11 functions that are replaced by move semantics.
    • Deprecate uninitialized_default_fill(_n) - use uninitialized_value_construct instead.
    • Deprecate const and volatile element types for vector, fixed_vector and deque.
  • Improvements to the standard
    • is_literal_type - use constexpr if to determine whether an expression is constant evaluated.
    • iterator - define typedefs without the use of inheritence.
    • result_of - use invoke_result instead.
    • get_temporary_buffer - unused part of the standard (citation).
    • unary_function, binary_function - no need to inherit from these types.
    • unary_negate, binary_negate - no need to inherit from these types: use not_fn or lambdas instead if necessary.
    • pointer_to_unary_function, pointer_to_binary_function - use mem_fn or a lambda instead.
    • mem_fun, mem_fun_ref - use mem_fn, mem_fn(ref()) or a lambda.
    • bind1st, bind2nd - use a lambda instead.
  • Miscellaneous
    • hashtable::equal_function() - use key_eq() instead.
    • hashtable::kAllocFlagBuckets - use kHashtableAllocFlagBuckets instead.
    • hashtable comparison operator (non equality) - shouldn't be comparing hashtables.
    • queue::emplace_back - use emplace instead.
    • safe_ptr::has_references - use has_unique_references instead.
    • slist::splice_after - use one of the other splice or splice_after overloads.
    • Deprecate is_lvalue_assignable. Its usage seems limited, and is_copy_assignable is probably the correct trait to use.

@jhopkins-ea jhopkins-ea merged commit c6141b9 into master Jun 9, 2023
22 checks passed
@jhopkins-ea jhopkins-ea deleted the release-candidate-3.21.12 branch June 9, 2023 06:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant