[libcxx] Make allocator<T>:allocate throw bad_array_new_length

Currently the member functions std::allocator<T>::allocate,
std::experimental::pmr::polymorphic_allocator::allocate and
std::resource_adaptor<T>::do_allocate throw an exception of type
std::length_error when the requested size exceeds the maximum size.

According to the C++ standard ([allocator.members]/4,
[mem.poly.allocator.mem]/1), std::allocator<T>::allocate and
std::pmr::polymorphic_allocator::allocate must throw a
std::bad_array_new_length exception in this case.

The patch fixes the issue with std::allocator<T>::allocate and changes
the type the exception thrown by
std::experimental::pmr::resource_adaptor<T>::do_allocate to
std::bad_array_new_length as well for consistency.

The patch resolves LWG 3237, LWG 3038 and LWG 3190.

Reviewed By: ldionne, #libc, Quuxplusone

Differential Revision: https://reviews.llvm.org/D110846

NOKEYCHECK=True
GitOrigin-RevId: be10b1f1cc5fc621c378da97810ffc13b2a9af71
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index 8d01a49..7ad1923 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -72,6 +72,12 @@
   Calls to these functions where the template argument was deduced by the
   compiler are unaffected by this change.
 
+- The functions ``std::allocator<T>::allocate`` and
+  ``std::experimental::pmr::polymorphic_allocator<T>::allocate`` now throw
+  an exception of type ``std::bad_array_new_length`` when the requested size
+  exceeds the maximum supported size, as required by the C++ standard.
+  Previously the type ``std::length_error`` was used.
+
 Build System Changes
 --------------------