The source file is used to anchor the destructor of format_error. When format is moved from experimental to stable this code would move to the dylib. One issue with code in the dylib is that it can't be used in constexpr context. There is a proposal to make format work during constant evaluation P2758 Emitting messages at compile time This paper has initially been received favourable by EWG. Therefore move the code to the header. This also avoids possible availability issues on Mac back deployment targets. Note it is expected that format will no longer be experimental with the next LLVM release. Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D150073
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
// -*- C++ -*-
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef _LIBCPP___FORMAT_FORMAT_ERROR_H
|
|
#define _LIBCPP___FORMAT_FORMAT_ERROR_H
|
|
|
|
#include <__config>
|
|
#include <cstdlib>
|
|
#include <stdexcept>
|
|
|
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
|
# pragma GCC system_header
|
|
#endif
|
|
|
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
|
|
|
#if _LIBCPP_STD_VER >= 20
|
|
|
|
_LIBCPP_DIAGNOSTIC_PUSH
|
|
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wweak-vtables")
|
|
class _LIBCPP_EXCEPTION_ABI format_error : public runtime_error {
|
|
public:
|
|
_LIBCPP_HIDE_FROM_ABI explicit format_error(const string& __s)
|
|
: runtime_error(__s) {}
|
|
_LIBCPP_HIDE_FROM_ABI explicit format_error(const char* __s)
|
|
: runtime_error(__s) {}
|
|
_LIBCPP_HIDE_FROM_ABI_VIRTUAL
|
|
~format_error() noexcept override = default;
|
|
};
|
|
_LIBCPP_DIAGNOSTIC_POP
|
|
|
|
_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void
|
|
__throw_format_error(const char* __s) {
|
|
#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
|
|
throw format_error(__s);
|
|
#else
|
|
(void)__s;
|
|
_VSTD::abort();
|
|
#endif
|
|
}
|
|
|
|
#endif //_LIBCPP_STD_VER >= 20
|
|
|
|
_LIBCPP_END_NAMESPACE_STD
|
|
|
|
#endif // _LIBCPP___FORMAT_FORMAT_ERROR_H
|