[libcxx] r323989 - Put the exception classes for experimental::optional and experimental::any back in the dylib for binary compatibility
Marshall Clow via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 1 10:45:57 PST 2018
Author: marshall
Date: Thu Feb 1 10:45:57 2018
New Revision: 323989
URL: http://llvm.org/viewvc/llvm-project?rev=323989&view=rev
Log:
Put the exception classes for experimental::optional and experimental::any back in the dylib for binary compatibility
Modified:
libcxx/trunk/src/any.cpp
libcxx/trunk/src/optional.cpp
Modified: libcxx/trunk/src/any.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/any.cpp?rev=323989&r1=323988&r2=323989&view=diff
==============================================================================
--- libcxx/trunk/src/any.cpp (original)
+++ libcxx/trunk/src/any.cpp Thu Feb 1 10:45:57 2018
@@ -14,3 +14,22 @@ const char* bad_any_cast::what() const _
return "bad any cast";
}
}
+
+
+#include <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
Modified: libcxx/trunk/src/optional.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/optional.cpp?rev=323989&r1=323988&r2=323989&view=diff
==============================================================================
--- libcxx/trunk/src/optional.cpp (original)
+++ libcxx/trunk/src/optional.cpp Thu Feb 1 10:45:57 2018
@@ -20,3 +20,23 @@ const char* bad_optional_access::what()
} // std
+
+#include <experimental/__config>
+
+// Preserve std::experimental::bad_optional_access for ABI compatibility
+// Even though it no longer exists in a header file
+_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
+
+class _LIBCPP_EXCEPTION_ABI _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS bad_optional_access
+ : public std::logic_error
+{
+public:
+ bad_optional_access() : std::logic_error("Bad optional Access") {}
+
+// Get the key function ~bad_optional_access() into the dylib
+ virtual ~bad_optional_access() _NOEXCEPT;
+};
+
+bad_optional_access::~bad_optional_access() _NOEXCEPT = default;
+
+_LIBCPP_END_NAMESPACE_EXPERIMENTAL
More information about the cfe-commits
mailing list