diff options
Diffstat (limited to 'libcxx/test/language.support/support.dynamic')
18 files changed, 617 insertions, 0 deletions
diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp new file mode 100644 index 00000000000..7ca8b800dd9 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc.pass.cpp @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bad_alloc + +#include <new> +#include <type_traits> +#include <cassert> + +int main() +{ + static_assert((std::is_base_of<std::exception, std::bad_alloc>::value), + "std::is_base_of<std::exception, std::bad_alloc>::value"); + static_assert(std::is_polymorphic<std::bad_alloc>::value, + "std::is_polymorphic<std::bad_alloc>::value"); + std::bad_alloc b; + std::bad_alloc b2 = b; + b2 = b; + const char* w = b2.what(); + assert(w); +} diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp new file mode 100644 index 00000000000..bc4a6cdb4a2 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length.pass.cpp @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bad_array_new_length + +#include <new> +#include <type_traits> +#include <cassert> + +int main() +{ + static_assert((std::is_base_of<std::bad_alloc, std::bad_array_new_length>::value), + "std::is_base_of<std::bad_alloc, std::bad_array_new_length>::value"); + static_assert(std::is_polymorphic<std::bad_array_new_length>::value, + "std::is_polymorphic<std::bad_array_new_length>::value"); + std::bad_array_new_length b; + std::bad_array_new_length b2 = b; + b2 = b; + const char* w = b2.what(); + assert(w); +} diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp new file mode 100644 index 00000000000..82ea243597d --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/alloc.errors/new.handler/new_handler.pass.cpp @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test new_handler + +#include <new> + +void f() {} + +int main() +{ + std::new_handler p = f; +} diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp new file mode 100644 index 00000000000..fa4d462f18d --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/alloc.errors/nothing_to_do.pass.cpp @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp b/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp new file mode 100644 index 00000000000..6b7949d4f98 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler.pass.cpp @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test set_new_handler + +#include <new> +#include <cassert> + +void f1() {} +void f2() {} + +int main() +{ + assert(std::set_new_handler(f1) == 0); + assert(std::set_new_handler(f2) == f1); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp new file mode 100644 index 00000000000..639607345f4 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array.pass.cpp @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new[] + +#include <new> +#include <cstddef> +#include <cassert> +#include <limits> + +int new_handler_called = 0; + +void new_handler() +{ + ++new_handler_called; + std::set_new_handler(0); +} + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + std::set_new_handler(new_handler); + try + { + void* vp = operator new[] (std::numeric_limits<std::size_t>::max()); + assert(false); + } + catch (std::bad_alloc&) + { + assert(new_handler_called == 1); + } + catch (...) + { + assert(false); + } + A* ap = new A[3]; + assert(ap); + assert(A_constructed == 3); + delete [] ap; + assert(A_constructed == 0); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp new file mode 100644 index 00000000000..182de18706a --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow.pass.cpp @@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new [] (nothrow) + +#include <new> +#include <cstddef> +#include <cassert> +#include <limits> + +int new_handler_called = 0; + +void new_handler() +{ + ++new_handler_called; + std::set_new_handler(0); +} + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + std::set_new_handler(new_handler); + try + { + void* vp = operator new [] (std::numeric_limits<std::size_t>::max(), std::nothrow); + assert(new_handler_called == 1); + assert(vp == 0); + } + catch (...) + { + assert(false); + } + A* ap = new(std::nothrow) A[3]; + assert(ap); + assert(A_constructed == 3); + delete [] ap; + assert(A_constructed == 0); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp new file mode 100644 index 00000000000..d06516c1fa6 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp @@ -0,0 +1,49 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new [] nothrow by replacing only operator new + +#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 delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + A* ap = new (std::nothrow) A[3]; + assert(ap); + assert(A_constructed == 3); + assert(new_called); + delete [] ap; + assert(A_constructed == 0); + assert(!new_called); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp new file mode 100644 index 00000000000..f673e05d0fb --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp @@ -0,0 +1,49 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new[] replacement by replacing only operator new + +#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 delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + A* ap = new A[3]; + assert(ap); + assert(A_constructed == 3); + assert(new_called == 1); + delete [] ap; + assert(A_constructed == 0); + assert(new_called == 0); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp new file mode 100644 index 00000000000..fa4d462f18d --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable.pass.cpp @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp new file mode 100644 index 00000000000..075bd39972a --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new.pass.cpp @@ -0,0 +1,30 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test placement new + +#include <new> +#include <cassert> + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + char buf[sizeof(A)]; + + A* ap = new(buf) A; + assert((char*)ap == buf); + assert(A_constructed == 1); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp new file mode 100644 index 00000000000..0179852c00e --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.placement/new_array.pass.cpp @@ -0,0 +1,30 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test placement new array + +#include <new> +#include <cassert> + +int A_constructed = 0; + +struct A +{ + A() {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + char buf[3*sizeof(A)]; + + A* ap = new(buf) A[3]; + assert((char*)ap == buf); + assert(A_constructed == 3); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp new file mode 100644 index 00000000000..54ac1196b74 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new.pass.cpp @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new + +#include <new> +#include <cstddef> +#include <cassert> +#include <limits> + +int new_handler_called = 0; + +void new_handler() +{ + ++new_handler_called; + std::set_new_handler(0); +} + +bool A_constructed = false; + +struct A +{ + A() {A_constructed = true;} + ~A() {A_constructed = false;} +}; + +int main() +{ + std::set_new_handler(new_handler); + try + { + void* vp = operator new (std::numeric_limits<std::size_t>::max()); + assert(false); + } + catch (std::bad_alloc&) + { + assert(new_handler_called == 1); + } + catch (...) + { + assert(false); + } + A* ap = new A; + assert(ap); + assert(A_constructed); + delete ap; + assert(!A_constructed); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp new file mode 100644 index 00000000000..edbd80268e9 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow.pass.cpp @@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new (nothrow) + +#include <new> +#include <cstddef> +#include <cassert> +#include <limits> + +int new_handler_called = 0; + +void new_handler() +{ + ++new_handler_called; + std::set_new_handler(0); +} + +bool A_constructed = false; + +struct A +{ + A() {A_constructed = true;} + ~A() {A_constructed = false;} +}; + +int main() +{ + std::set_new_handler(new_handler); + try + { + void* vp = operator new (std::numeric_limits<std::size_t>::max(), std::nothrow); + assert(new_handler_called == 1); + assert(vp == 0); + } + catch (...) + { + assert(false); + } + A* ap = new(std::nothrow) A; + assert(ap); + assert(A_constructed); + delete ap; + assert(!A_constructed); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp new file mode 100644 index 00000000000..4ee05d5a27c --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp @@ -0,0 +1,49 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new nothrow by replacing only operator new + +#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 delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +bool A_constructed = false; + +struct A +{ + A() {A_constructed = true;} + ~A() {A_constructed = false;} +}; + +int main() +{ + A* ap = new (std::nothrow) A; + assert(ap); + assert(A_constructed); + assert(new_called); + delete ap; + assert(!A_constructed); + assert(!new_called); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp new file mode 100644 index 00000000000..1d35f200f63 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp @@ -0,0 +1,49 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + // test operator new replacement + +#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 delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +bool A_constructed = false; + +struct A +{ + A() {A_constructed = true;} + ~A() {A_constructed = false;} +}; + +int main() +{ + A* ap = new A; + assert(ap); + assert(A_constructed); + assert(new_called); + delete ap; + assert(!A_constructed); + assert(!new_called); +} diff --git a/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp b/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp new file mode 100644 index 00000000000..fa4d462f18d --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/new.delete/nothing_to_do.pass.cpp @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/libcxx/test/language.support/support.dynamic/version.pass.cpp b/libcxx/test/language.support/support.dynamic/version.pass.cpp new file mode 100644 index 00000000000..32273803572 --- /dev/null +++ b/libcxx/test/language.support/support.dynamic/version.pass.cpp @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <new> + +#include <new> + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} |