aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-03-16 21:16:35 -0400
committerJason Merrill <jason@redhat.com>2020-03-16 23:46:08 -0400
commit57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797 (patch)
tree180a42fa94c254ccccd3a4667a5d6ae8d3d33805
parent950183c774134410399a5ceeeec153f7d64ebe91 (diff)
downloadgcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.zip
gcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.tar.gz
gcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.tar.bz2
c++: Add test for PR 93901.
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept57.C40
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept57.C b/gcc/testsuite/g++.dg/cpp0x/noexcept57.C
new file mode 100644
index 0000000..aca9891
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept57.C
@@ -0,0 +1,40 @@
+// PR c++/93901
+// { dg-do compile { target c++11 } }
+
+void *operator new (__SIZE_TYPE__, void *p) noexcept { return p; }
+
+extern void *mem;
+
+constexpr bool YES = true;
+
+struct NoexceptTrueCtor {
+ NoexceptTrueCtor() noexcept(true);
+};
+void NoexceptTrueFun() noexcept(true);
+
+struct NoexceptYesCtor {
+ NoexceptYesCtor() noexcept(YES);
+};
+void NoexceptYesFun() noexcept(YES);
+
+struct NoexceptOneEqOneCtor {
+ NoexceptOneEqOneCtor() noexcept(1 == 1);
+};
+void NoexceptOneEqOneFun() noexcept(1 == 1);
+
+struct NoNoexceptCtor {
+ NoNoexceptCtor();
+};
+void NoNoexceptFun();
+
+static_assert(noexcept(new(mem) NoexceptTrueCtor), "2"); // OK
+static_assert(noexcept(NoexceptTrueFun()), "3"); // OK
+
+static_assert(noexcept(new(mem) NoexceptYesCtor), "5"); // fail
+static_assert(noexcept(NoexceptYesFun()), "6"); // OK
+
+static_assert(noexcept(new(mem) NoexceptOneEqOneCtor), "8"); // fail
+static_assert(noexcept(NoexceptOneEqOneFun()), "9"); // OK
+
+static_assert(!noexcept(new(mem) NoNoexceptCtor), "11"); // OK
+static_assert(!noexcept(NoNoexceptFun()), "12"); // OK