mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 16:58:30 +00:00
third_party/libcxxabi: Add test suite (#1076)
Added the `libcxxabi` test suite as found in LLVM 17.0.6. Some tests that do not apply to the current configuration of comsopolitan are not added. These include: - `backtrace_test`, `forced_unwind*`: Use unwind function unsupported in SjLj mode. - `noexception*`: Designed to test `libcxxabi` in no exceptions mode. Some tests are added but not enabled due to bugs specific to GCC or cosmopolitan. These are clearly indicated in the `BUILD.mk` file.
This commit is contained in:
parent
8fb24a8f88
commit
b0566348b2
65 changed files with 43262 additions and 2 deletions
217
third_party/libcxxabi/test/catch_ptr_02.pass.cc
vendored
Normal file
217
third_party/libcxxabi/test/catch_ptr_02.pass.cc
vendored
Normal file
|
@ -0,0 +1,217 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: no-exceptions
|
||||
|
||||
// Compilers emit warnings about exceptions of type 'Child' being caught by
|
||||
// an earlier handler of type 'Base'. Congrats, you've just diagnosed the
|
||||
// behavior under test.
|
||||
// ADDITIONAL_COMPILE_FLAGS: -Wno-exceptions
|
||||
|
||||
// The fix for PR17222 made it in the dylib for macOS 10.10
|
||||
// XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.9
|
||||
|
||||
#include "third_party/libcxx/cassert"
|
||||
#include "libc/isystem/stdint.h"
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#define DISABLE_NULLPTR_TESTS
|
||||
#endif
|
||||
|
||||
struct A {};
|
||||
A a;
|
||||
const A ca = A();
|
||||
|
||||
void test1 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &a;
|
||||
assert(false);
|
||||
}
|
||||
catch ( const A* )
|
||||
{
|
||||
}
|
||||
catch ( A *)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
void test2 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &a;
|
||||
assert(false);
|
||||
}
|
||||
catch ( A* )
|
||||
{
|
||||
}
|
||||
catch ( const A *)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
void test3 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &ca;
|
||||
assert(false);
|
||||
}
|
||||
catch ( const A* )
|
||||
{
|
||||
}
|
||||
catch ( A *)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
void test4 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw &ca;
|
||||
assert(false);
|
||||
}
|
||||
catch ( A *)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
catch ( const A* )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
struct base1 {int x;};
|
||||
struct base2 {int x;};
|
||||
struct derived : base1, base2 {};
|
||||
|
||||
void test5 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw (derived*)0;
|
||||
assert(false);
|
||||
}
|
||||
catch (base2 *p) {
|
||||
assert (p == 0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
void test6 ()
|
||||
{
|
||||
#if !defined(DISABLE_NULLPTR_TESTS)
|
||||
try
|
||||
{
|
||||
throw nullptr;
|
||||
assert(false);
|
||||
}
|
||||
catch (base2 *p) {
|
||||
assert (p == nullptr);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void test7 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw (derived*)12;
|
||||
assert(false);
|
||||
}
|
||||
catch (base2 *p) {
|
||||
assert ((uintptr_t)p == 12+sizeof(base1));
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct vBase {};
|
||||
struct vDerived : virtual public vBase {};
|
||||
|
||||
void test8 ()
|
||||
{
|
||||
vDerived derived;
|
||||
try
|
||||
{
|
||||
throw &derived;
|
||||
assert(false);
|
||||
}
|
||||
catch (vBase *p) {
|
||||
assert(p != 0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
void test9 ()
|
||||
{
|
||||
#if !defined(DISABLE_NULLPTR_TESTS)
|
||||
try
|
||||
{
|
||||
throw nullptr;
|
||||
assert(false);
|
||||
}
|
||||
catch (vBase *p) {
|
||||
assert(p == 0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void test10 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
throw (vDerived*)0;
|
||||
assert(false);
|
||||
}
|
||||
catch (vBase *p) {
|
||||
assert(p == 0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
test1();
|
||||
test2();
|
||||
test3();
|
||||
test4();
|
||||
test5();
|
||||
test6();
|
||||
test7();
|
||||
test8();
|
||||
test9();
|
||||
test10();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue