diff options
author | Jason Merrill <jason@redhat.com> | 2020-03-16 21:16:35 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2020-03-16 23:46:08 -0400 |
commit | 57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797 (patch) | |
tree | 180a42fa94c254ccccd3a4667a5d6ae8d3d33805 /gcc | |
parent | 950183c774134410399a5ceeeec153f7d64ebe91 (diff) | |
download | gcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.zip gcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.tar.gz gcc-57e7ad5a8fd5a7bddf15e2fede6d2546cc6a2797.tar.bz2 |
c++: Add test for PR 93901.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/noexcept57.C | 40 |
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 |