mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 14: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
66
third_party/libcxxabi/test/test_vector3.pass.cc
vendored
Normal file
66
third_party/libcxxabi/test/test_vector3.pass.cc
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
|
||||
#include "third_party/libcxxabi/include/cxxabi.h"
|
||||
|
||||
#include "libc/isystem/stdio.h"
|
||||
#include "libc/isystem/stdlib.h"
|
||||
#include "libc/isystem/assert.h"
|
||||
#include "third_party/libcxx/exception"
|
||||
|
||||
#include "third_party/libcxx/memory"
|
||||
|
||||
// Disable warning about throw always calling terminate.
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
# pragma GCC diagnostic ignored "-Wterminate"
|
||||
#endif
|
||||
|
||||
// use dtors instead of try/catch
|
||||
namespace test1 {
|
||||
struct B {
|
||||
~B() {
|
||||
printf("should not be run\n");
|
||||
exit(10);
|
||||
}
|
||||
};
|
||||
|
||||
struct A {
|
||||
~A()
|
||||
#if __has_feature(cxx_noexcept)
|
||||
noexcept(false)
|
||||
#endif
|
||||
{
|
||||
B b;
|
||||
throw 0;
|
||||
}
|
||||
};
|
||||
} // test1
|
||||
|
||||
void my_terminate() { exit(0); }
|
||||
|
||||
template <class T>
|
||||
void destroy(void* v)
|
||||
{
|
||||
T* t = static_cast<T*>(v);
|
||||
t->~T();
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
std::set_terminate(my_terminate);
|
||||
{
|
||||
typedef test1::A Array[10];
|
||||
Array a[10]; // calls _cxa_vec_dtor
|
||||
__cxxabiv1::__cxa_vec_dtor(a, 10, sizeof(test1::A), destroy<test1::A>);
|
||||
assert(false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue