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 Dionneint main () { 32c86011f5SLouis Dionne try { A a; throw 3; assert(false); } 33c86011f5SLouis Dionne catch (int) {} 34c86011f5SLouis Dionne } 35