libcxx: Add missing implementation source files (#1089)

Added the implementation for `std::bad_any_cast` from upstream
`any.cpp`, and `std::bad_variant_access` from upstream `variant.cpp`.

This fixes missing `vtable` and `typeinfo` symbols when trying to link
code referencing these exception types.
This commit is contained in:
Trung Nguyen 2024-01-18 23:20:25 +07:00 committed by GitHub
parent 1ef63eb206
commit 8834dde0c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 53 additions and 0 deletions

View file

@ -141,6 +141,7 @@ THIRD_PARTY_LIBCXX_A_HDRS = \
THIRD_PARTY_LIBCXX_A_SRCS_CC = \ THIRD_PARTY_LIBCXX_A_SRCS_CC = \
third_party/libcxx/algorithm.cc \ third_party/libcxx/algorithm.cc \
third_party/libcxx/any.cc \
third_party/libcxx/charconv.cc \ third_party/libcxx/charconv.cc \
third_party/libcxx/chrono.cc \ third_party/libcxx/chrono.cc \
third_party/libcxx/condition_variable.cc \ third_party/libcxx/condition_variable.cc \
@ -170,6 +171,7 @@ THIRD_PARTY_LIBCXX_A_SRCS_CC = \
third_party/libcxx/system_error.cc \ third_party/libcxx/system_error.cc \
third_party/libcxx/thread.cc \ third_party/libcxx/thread.cc \
third_party/libcxx/valarray.cc \ third_party/libcxx/valarray.cc \
third_party/libcxx/variant.cc \
third_party/libcxx/vector.cc third_party/libcxx/vector.cc
THIRD_PARTY_LIBCXX_A_SRCS = \ THIRD_PARTY_LIBCXX_A_SRCS = \

34
third_party/libcxx/any.cc vendored Normal file
View file

@ -0,0 +1,34 @@
//===---------------------------- any.cpp ---------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "third_party/libcxx/any"
namespace std {
const char* bad_any_cast::what() const _NOEXCEPT {
return "bad any cast";
}
}
#include "third_party/libcxx/experimental/__config"
// Preserve std::experimental::any_bad_cast for ABI compatibility
// Even though it no longer exists in a header file
_LIBCPP_BEGIN_NAMESPACE_LFTS
class _LIBCPP_EXCEPTION_ABI _LIBCPP_AVAILABILITY_BAD_ANY_CAST bad_any_cast : public bad_cast
{
public:
virtual const char* what() const _NOEXCEPT;
};
const char* bad_any_cast::what() const _NOEXCEPT {
return "bad any cast";
}
_LIBCPP_END_NAMESPACE_LFTS

17
third_party/libcxx/variant.cc vendored Normal file
View file

@ -0,0 +1,17 @@
//===------------------------ variant.cpp ---------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "third_party/libcxx/variant"
namespace std {
const char* bad_variant_access::what() const noexcept {
return "bad_variant_access";
}
} // namespace std