Index: include/new
===================================================================
--- include/new	(revision 192592)
+++ include/new	(working copy)
@@ -51,11 +51,15 @@
 void* operator new(std::size_t size, const std::nothrow_t&) noexcept;   // replaceable
 void  operator delete(void* ptr) noexcept;                              // replaceable
 void  operator delete(void* ptr, const std::nothrow_t&) noexcept;       // replaceable
+void  operator delete(void*, std::size_t) noexcept;                        // replaceable in C++14
+void  operator delete(void*, std::size_t, const std::nothrow_t&) noexcept; // replaceable in C++14
 
 void* operator new[](std::size_t size);                                 // replaceable
 void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; // replaceable
 void  operator delete[](void* ptr) noexcept;                            // replaceable
 void  operator delete[](void* ptr, const std::nothrow_t&) noexcept;     // replaceable
+void  operator delete[](void*, std::size_t) noexcept;                        // replaceable in C++14
+void  operator delete[](void*, std::size_t, const std::nothrow_t&) noexcept; // replaceable in C++14
 
 void* operator new  (std::size_t size, void* ptr) noexcept;
 void* operator new[](std::size_t size, void* ptr) noexcept;
@@ -128,6 +132,8 @@
 _LIBCPP_NEW_DELETE_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
 _LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p) _NOEXCEPT;
 _LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
+_LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p, std::size_t __sz) _NOEXCEPT;
+_LIBCPP_NEW_DELETE_VIS void  operator delete(void* __p, std::size_t __sz, const std::nothrow_t&) _NOEXCEPT;
 
 _LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz)
 #if !__has_feature(cxx_noexcept)
@@ -137,6 +143,8 @@
 _LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT _NOALIAS;
 _LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p) _NOEXCEPT;
 _LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
+_LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p, std::size_t __sz) _NOEXCEPT;
+_LIBCPP_NEW_DELETE_VIS void  operator delete[](void* __p, std::size_t __sz, const std::nothrow_t&) _NOEXCEPT;
 
 inline _LIBCPP_INLINE_VISIBILITY void* operator new  (std::size_t, void* __p) _NOEXCEPT {return __p;}
 inline _LIBCPP_INLINE_VISIBILITY void* operator new[](std::size_t, void* __p) _NOEXCEPT {return __p;}
Index: src/new.cpp
===================================================================
--- src/new.cpp	(revision 192592)
+++ src/new.cpp	(working copy)
@@ -133,6 +133,20 @@
 
 _LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS
 void
+operator delete(void* ptr, std::size_t) _NOEXCEPT
+{
+    ::operator delete(ptr);
+}
+
+_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS
+void
+operator delete(void* ptr, std::size_t, const std::nothrow_t&) _NOEXCEPT
+{
+    ::operator delete(ptr);
+}
+
+_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS
+void
 operator delete[] (void* ptr) _NOEXCEPT
 {
     ::operator delete (ptr);
@@ -145,6 +159,21 @@
     ::operator delete[](ptr);
 }
 
+_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS
+void
+operator delete[](void* ptr, std::size_t) _NOEXCEPT
+{
+    ::operator delete[](ptr);
+}
+
+_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS
+void
+operator delete[](void* ptr, std::size_t, const std::nothrow_t&) _NOEXCEPT
+{
+    ::operator delete[](ptr);
+}
+
+
 #endif // !__GLIBCXX__
 
 namespace std
Index: test/language.support/support.dynamic/new.delete/new.delete.array/delete_array_sized.pass.cpp
===================================================================
--- test/language.support/support.dynamic/new.delete/new.delete.array/delete_array_sized.pass.cpp	(revision 0)
+++ test/language.support/support.dynamic/new.delete/new.delete.array/delete_array_sized.pass.cpp	(working copy)
@@ -0,0 +1,95 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test that the default implementation of operator delete[] ( void *, size_t )
+ // exists, and calls the non-size version
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+#include <iostream>
+
+volatile int new_called = 0;
+
+
+void* operator new(std::size_t sz) throw(std::bad_alloc)
+{
+    ++new_called;
+    return std::malloc(sz);
+}
+
+void  operator delete(void* p) throw()
+{
+    --new_called;
+    std::free(p);
+}
+
+
+void* operator new[] (size_t sz, size_t)
+{
+    return ::operator new[](sz);
+}
+
+void* operator new[] (size_t sz, size_t, const std::nothrow_t & nt)
+{
+    return ::operator new[](sz, nt);
+}
+
+int A_constructed = 0;
+
+struct A
+{
+    A() {++A_constructed;}
+    ~A() {--A_constructed;}
+	int foo;
+	};
+
+struct X
+{
+    X() {throw 1;}
+};
+
+
+int main()
+{
+    {
+    A* ap = new (sizeof(A)) A[3];
+    assert(ap);
+    assert(A_constructed == 3);
+    assert(new_called == 1);
+    delete [] ap;
+    assert(A_constructed == 0);
+    assert(new_called == 0);
+    }
+
+    {
+    A* ap = new (sizeof(A), std::nothrow_t{}) A[3];
+    assert(ap);
+    assert(A_constructed == 3);
+    assert(new_called == 1);
+    delete [] ap;
+    assert(A_constructed == 0);
+    assert(new_called == 0);
+    }
+
+    {
+    try { ::new (sizeof(X)) X[3]; }
+    catch (...) {}
+    assert(new_called == 0);
+    }
+    
+    {
+    try { ::new (sizeof(X), std::nothrow_t{}) X[3]; }
+    catch (...) {}
+    assert(new_called == 0);
+    }
+}
Index: test/language.support/support.dynamic/new.delete/new.delete.single/delete_sized.pass.cpp
===================================================================
--- test/language.support/support.dynamic/new.delete/new.delete.single/delete_sized.pass.cpp	(revision 0)
+++ test/language.support/support.dynamic/new.delete/new.delete.single/delete_sized.pass.cpp	(working copy)
@@ -0,0 +1,112 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ // test that the default implementation of operator delete ( void *, size_t )
+ // exists, and calls the non-size version
+
+#include <new>
+#include <cstddef>
+#include <cstdlib>
+#include <cassert>
+#include <limits>
+
+int new_called = 0;
+
+void* operator new(std::size_t s) throw(std::bad_alloc)
+{
+    ++new_called;
+    return std::malloc(s);
+}
+
+void* operator new(std::size_t s, const std::nothrow_t &nt) noexcept
+{
+    ++new_called;
+    return std::malloc(s);
+}
+
+void  operator delete(void* p) throw()
+{
+    --new_called;
+    std::free(p);
+}
+
+void* operator new (size_t sz, size_t)
+{
+    return ::operator new(sz);
+}
+
+void* operator new (size_t sz, size_t, const std::nothrow_t & nt)
+{
+    return ::operator new(sz, nt);
+}
+
+
+
+bool A_constructed = false;
+
+struct A
+{
+    A() {A_constructed = true;}
+    ~A() {A_constructed = false;}
+};
+
+struct X
+{
+    X() {throw 1;}
+};
+
+template <typename T>
+void sized_destroy ( T *ptr )
+{
+    ptr->~T();
+    ::operator delete(ptr, sizeof(T));  
+}
+
+template <typename T>
+void sized_destroy_nothrow ( T *ptr )
+{
+    ptr->~T();
+    ::operator delete(ptr, sizeof(T), std::nothrow_t{});    
+}
+
+int main()
+{
+    {
+    A* ap = new (std::nothrow) A;
+    assert(ap);
+    assert(A_constructed);
+    assert(new_called);
+    sized_destroy ( ap );
+    assert(!A_constructed);
+    assert(!new_called);
+    }
+    
+    {
+    A* ap = new (std::nothrow) A;
+    assert(ap);
+    assert(A_constructed);
+    assert(new_called);
+    sized_destroy_nothrow ( ap );
+    assert(!A_constructed);
+    assert(!new_called);
+    }
+
+    {
+    try { ::new (sizeof(X)) X; }
+    catch (...) {}
+    assert(new_called == 0);
+    }
+    
+    {
+    try { ::new (sizeof(X), std::nothrow_t{} ) X; }
+    catch (...) {}
+    assert(new_called == 0);
+    }
+
+}
