aboutsummaryrefslogtreecommitdiff
path: root/tests/libcxx/include/new
diff options
context:
space:
mode:
authorAlon Zakai <azakai@mozilla.com>2011-01-17 15:36:26 -0800
committerAlon Zakai <azakai@mozilla.com>2011-01-17 15:36:26 -0800
commit1f3de5c76e4947afccca350da24859e52f6aa83f (patch)
tree1539bbf09d9a3b71e06db5444d4ea5ceb43f8013 /tests/libcxx/include/new
parent13a520ed493d40e405045df1829863edfdb2308e (diff)
libcxx test; support for linking in test runner; failure in clang_0_1.test_libcxx
Diffstat (limited to 'tests/libcxx/include/new')
-rw-r--r--tests/libcxx/include/new108
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/libcxx/include/new b/tests/libcxx/include/new
new file mode 100644
index 00000000..68f0274b
--- /dev/null
+++ b/tests/libcxx/include/new
@@ -0,0 +1,108 @@
+// -*- C++ -*-
+//===----------------------------- new ------------------------------------===//
+//
+// 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.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_NEW
+#define _LIBCPP_NEW
+
+/*
+ new synopsis
+
+namespace std
+{
+
+class bad_alloc
+ : public exception
+{
+public:
+ bad_alloc() throw();
+ bad_alloc(const bad_alloc&) throw();
+ bad_alloc& operator=(const bad_alloc&) throw();
+ virtual ~bad_alloc() throw();
+ virtual const char* what() const throw();
+};
+
+struct nothrow_t {};
+extern const nothrow_t nothrow;
+typedef void (*new_handler)();
+new_handler set_new_handler(new_handler new_p) throw();
+new_handler get_new_handler() throw();
+
+} // std
+
+void* operator new(std::size_t size) throw(std::bad_alloc); // replaceable
+void* operator new(std::size_t size, const std::nothrow_t&) throw(); // replaceable
+void operator delete(void* ptr) throw(); // replaceable
+void operator delete(void* ptr, const std::nothrow_t&) throw(); // replaceable
+
+void* operator new[](std::size_t size) throw(std::bad_alloc); // replaceable
+void* operator new[](std::size_t size, const std::nothrow_t&) throw(); // replaceable
+void operator delete[](void* ptr) throw(); // replaceable
+void operator delete[](void* ptr, const std::nothrow_t&) throw(); // replaceable
+
+void* operator new (std::size_t size, void* ptr) throw();
+void* operator new[](std::size_t size, void* ptr) throw();
+void operator delete (void* ptr, void*) throw();
+void operator delete[](void* ptr, void*) throw();
+
+*/
+
+#include <__config>
+#include <exception>
+#include <cstddef>
+
+#pragma GCC system_header
+
+namespace std // purposefully not using versioning namespace
+{
+
+class _LIBCPP_EXCEPTION_ABI bad_alloc
+ : public exception
+{
+public:
+ bad_alloc() throw();
+ virtual ~bad_alloc() throw();
+ virtual const char* what() const throw();
+};
+
+class _LIBCPP_EXCEPTION_ABI bad_array_new_length
+ : public bad_alloc
+{
+public:
+ bad_array_new_length() throw();
+ virtual ~bad_array_new_length() throw();
+ virtual const char* what() const throw();
+};
+
+void __throw_bad_alloc(); // not in C++ spec
+
+struct _LIBCPP_VISIBLE nothrow_t {};
+extern _LIBCPP_VISIBLE const nothrow_t nothrow;
+typedef void (*new_handler)();
+_LIBCPP_VISIBLE new_handler set_new_handler(new_handler) throw();
+_LIBCPP_VISIBLE new_handler get_new_handler() throw();
+
+} // std
+
+_LIBCPP_VISIBLE void* operator new(std::size_t) throw(std::bad_alloc);
+_LIBCPP_VISIBLE void* operator new(std::size_t, const std::nothrow_t&) throw();
+_LIBCPP_VISIBLE void operator delete(void*) throw();
+_LIBCPP_VISIBLE void operator delete(void*, const std::nothrow_t&) throw();
+
+_LIBCPP_VISIBLE void* operator new[](std::size_t) throw(std::bad_alloc);
+_LIBCPP_VISIBLE void* operator new[](std::size_t, const std::nothrow_t&) throw();
+_LIBCPP_VISIBLE void operator delete[](void*) throw();
+_LIBCPP_VISIBLE void operator delete[](void*, const std::nothrow_t&) throw();
+
+_LIBCPP_INLINE_VISIBILITY inline void* operator new (std::size_t, void* __p) throw() {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void* operator new[](std::size_t, void* __p) throw() {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete (void*, void*) throw() {}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete[](void*, void*) throw() {}
+
+#endif // _LIBCPP_NEW