xref: /llvm-project/libcxxabi/test/uncaught_exception.pass.cpp (revision 3497500946c9b6a1b2e1452312a24c41ee412b34)
1eb8650a7SLouis Dionne //===----------------------------------------------------------------------===//
2c86011f5SLouis Dionne //
3c86011f5SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c86011f5SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5c86011f5SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c86011f5SLouis Dionne //
7c86011f5SLouis Dionne //===----------------------------------------------------------------------===//
8c86011f5SLouis Dionne 
98c61114cSLouis Dionne // UNSUPPORTED: no-exceptions
10c86011f5SLouis Dionne 
11c86011f5SLouis Dionne // This tests that libc++abi still provides __cxa_uncaught_exception() for
12c86011f5SLouis Dionne // ABI compatibility, even though the Standard doesn't require it to.
13c86011f5SLouis Dionne 
146a884a9aSLouis Dionne // __cxa_uncaught_exception was not re-exported from libc++ previously. This leads
156a884a9aSLouis Dionne // to undefined symbols when linking against a libc++ that re-exports the symbols,
166a884a9aSLouis Dionne // but running against a libc++ that doesn't. Fortunately, usage of __cxa_uncaught_exception()
176a884a9aSLouis Dionne // in the wild seems to be close to non-existent.
18*34975009SLouis Dionne // XFAIL: using-built-library-before-llvm-19
196a884a9aSLouis Dionne 
20c86011f5SLouis Dionne #include <cxxabi.h>
21c86011f5SLouis Dionne #include <cassert>
22c86011f5SLouis Dionne 
23c86011f5SLouis Dionne // namespace __cxxabiv1 {
24c86011f5SLouis Dionne //      extern bool __cxa_uncaught_exception () throw();
25c86011f5SLouis Dionne // }
26c86011f5SLouis Dionne 
27c86011f5SLouis Dionne struct A {
~AA28c86011f5SLouis Dionne     ~A() { assert( __cxxabiv1::__cxa_uncaught_exception()); }
29c86011f5SLouis Dionne };
30c86011f5SLouis Dionne 
main()31c86011f5SLouis Dionne int main () {
32c86011f5SLouis Dionne     try { A a; throw 3; assert(false); }
33c86011f5SLouis Dionne     catch (int) {}
34c86011f5SLouis Dionne }
35