diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 78936d4..07550a4 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -132,7 +132,7 @@ jobs:
steps:
- name: Install dependencies
run: |
- python3 -m pip install -U pip==21.3.1
+ python3 -m pip install -U pip
pip3 install meson ninja
- uses: actions/checkout@v3
diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml
index 6cacea8..620aa34 100644
--- a/.github/workflows/gh-pages.yaml
+++ b/.github/workflows/gh-pages.yaml
@@ -29,7 +29,7 @@ jobs:
run: |
apt -y update
apt -y install --no-install-recommends git python3 python3-pip doxygen
- pip3 install --upgrade --requirement tools/requirements.txt
+ pip3 install --upgrade poxy
- name: Generate docs
run: |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cd5788..88852b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,8 @@ template:
#### Fixes:
- fixed null pointer dereference in parser when exceptions are disabled (#169) (@ncaklovic)
+- fixed spurious warnings in MSVC 19.34
+- fixed some `_Float16` detection issues
diff --git a/docs/poxy.toml b/docs/poxy.toml
index 9fbe86d..2ca0455 100644
--- a/docs/poxy.toml
+++ b/docs/poxy.toml
@@ -1,5 +1,7 @@
# this is a config file for Poxy - a Doxygen + m.css front-end written in Python.
# https://github.com/marzer/poxy
+#
+# config reference: https://github.com/marzer/poxy/wiki/Configuration-options
name = 'toml++'
author = 'Mark Gillard'
diff --git a/include/toml++/impl/forward_declarations.h b/include/toml++/impl/forward_declarations.h
index 5255912..8922dce 100644
--- a/include/toml++/impl/forward_declarations.h
+++ b/include/toml++/impl/forward_declarations.h
@@ -625,11 +625,6 @@ TOML_IMPL_NAMESPACE_START
template
struct float_traits : float_traits_base::digits, std::numeric_limits::digits10>
{};
-#ifdef TOML_FP16
- template <>
- struct float_traits : float_traits_base
- {};
-#endif
#ifdef TOML_FLOAT16
template <>
struct float_traits : float_traits_base
@@ -651,11 +646,6 @@ TOML_IMPL_NAMESPACE_START
template <>
struct value_traits : float_traits
{};
-#ifdef TOML_FP16
- template <>
- struct value_traits : float_traits
- {};
-#endif
#ifdef TOML_FLOAT16
template <>
struct value_traits : float_traits
diff --git a/include/toml++/impl/preprocessor.h b/include/toml++/impl/preprocessor.h
index 44c990a..63c189b 100644
--- a/include/toml++/impl/preprocessor.h
+++ b/include/toml++/impl/preprocessor.h
@@ -31,7 +31,7 @@
#endif
//#=====================================================================================================================
-//# COMPILER/OS/ARCH DETECTION
+//# COMPILER / OS
//#=====================================================================================================================
#ifdef __clang__
@@ -75,11 +75,46 @@
#else
#define TOML_INTELLISENSE 0
#endif
-#if defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64) || defined(__ARM_64BIT_STATE) \
- || defined(__arm__) || defined(_M_ARM) || defined(__ARM_32BIT_STATE)
-#define TOML_ARM 1
+
+//#=====================================================================================================================
+//# ARCHITECTURE
+//#=====================================================================================================================
+
+// IA64
+#if defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
+#define TOML_ARCH_ITANIUM 1
#else
-#define TOML_ARM 0
+#define TOML_ARCH_ITANIUM 0
+#endif
+
+// AMD64
+#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64)
+#define TOML_ARCH_AMD64 1
+#else
+#define TOML_ARCH_AMD64 0
+#endif
+
+// 32-bit x86
+#if defined(__i386__) || defined(_M_IX86)
+#define TOML_ARCH_X86 1
+#else
+#define TOML_ARCH_X86 0
+#endif
+
+// ARM
+#if defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64) || defined(__ARM_64BIT_STATE) \
+ || defined(_M_ARM64EC)
+#define TOML_ARCH_ARM32 0
+#define TOML_ARCH_ARM64 1
+#define TOML_ARCH_ARM 1
+#elif defined(__arm__) || defined(_M_ARM) || defined(__ARM_32BIT_STATE)
+#define TOML_ARCH_ARM32 1
+#define TOML_ARCH_ARM64 0
+#define TOML_ARCH_ARM 1
+#else
+#define TOML_ARCH_ARM32 0
+#define TOML_ARCH_ARM64 0
+#define TOML_ARCH_ARM 0
#endif
//#=====================================================================================================================
@@ -1016,40 +1051,62 @@ TOML_ENABLE_WARNINGS;
//# }}
//#=====================================================================================================================
-//# EXTENDED INT AND FLOAT TYPES
+//# FLOAT16
//#=====================================================================================================================
-// clang-format off
-#ifdef __FLT16_MANT_DIG__
- #if __FLT_RADIX__ == 2 \
- && __FLT16_MANT_DIG__ == 11 \
- && __FLT16_DIG__ == 3 \
- && __FLT16_MIN_EXP__ == -13 \
- && __FLT16_MIN_10_EXP__ == -4 \
- && __FLT16_MAX_EXP__ == 16 \
- && __FLT16_MAX_10_EXP__ == 4
- #if TOML_ARM && (TOML_GCC || TOML_CLANG)
- #define TOML_FP16 __fp16
- #endif
- #if TOML_ARM && TOML_CLANG // not present in g++
- #define TOML_FLOAT16 _Float16
- #endif
- #endif
+#if TOML_CLANG
+//# {{
+// Excerpt from https://clang.llvm.org/docs/LanguageExtensions.html:
+//
+// _Float16 is currently only supported on the following targets,
+// with further targets pending ABI standardization:
+//
+// 32-bit ARM
+// 64-bit ARM (AArch64)
+// AMDGPU
+// SPIR
+// X86 as long as SSE2 is available
+//
+//# }}
+#if (TOML_ARCH_ARM || TOML_ARCH_X86 || TOML_ARCH_AMD64) && defined(__FLT16_MANT_DIG__)
+#define TOML_FLOAT16 _Float16
+#endif
+#elif TOML_GCC
+//# {{
+// Excerpt from https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html:
+//
+// The _Float16 type is supported on AArch64 systems by default, on ARM systems when the IEEE format for
+// 16-bit floating-point types is selected with -mfp16-format=ieee and,
+// for both C and C++, on x86 systems with SSE2 enabled.
+//
+// *** except: the bit about x86 seems incorrect?? ***
+//# }}
+/*
+
+ */
+#if (TOML_ARCH_ARM /*|| TOML_ARCH_X86 || TOML_ARCH_AMD64*/) && defined(__FLT16_MANT_DIG__)
+#define TOML_FLOAT16 _Float16
+#endif
#endif
-#if defined(__SIZEOF_FLOAT128__) \
- && defined(__FLT128_MANT_DIG__) \
- && defined(__LDBL_MANT_DIG__) \
+//#=====================================================================================================================
+//# FLOAT128
+//#=====================================================================================================================
+
+#if defined(__SIZEOF_FLOAT128__) && defined(__FLT128_MANT_DIG__) && defined(__LDBL_MANT_DIG__) \
&& __FLT128_MANT_DIG__ > __LDBL_MANT_DIG__
- #define TOML_FLOAT128 __float128
+#define TOML_FLOAT128 __float128
#endif
+//#=====================================================================================================================
+//# INT128
+//#=====================================================================================================================
+
#ifdef __SIZEOF_INT128__
- #define TOML_INT128 __int128_t
- #define TOML_UINT128 __uint128_t
+#define TOML_INT128 __int128_t
+#define TOML_UINT128 __uint128_t
#endif
-// clang-format on
//#====================================================================================================================
//# VERSIONS AND NAMESPACES
//#====================================================================================================================
diff --git a/include/toml++/toml.h b/include/toml++/toml.h
index 30ca7e7..f7db954 100644
--- a/include/toml++/toml.h
+++ b/include/toml++/toml.h
@@ -90,7 +90,12 @@ TOML_POP_WARNINGS;
#undef TOML_ANON_NAMESPACE
#undef TOML_ANON_NAMESPACE_END
#undef TOML_ANON_NAMESPACE_START
-#undef TOML_ARM
+#undef TOML_ARCH_ARM
+#undef TOML_ARCH_AMD64
+#undef TOML_ARCH_ARM32
+#undef TOML_ARCH_ARM64
+#undef TOML_ARCH_ITANIUM
+#undef TOML_ARCH_X86
#undef TOML_ASSERT
#undef TOML_ASSERT_ASSUME
#undef TOML_ASSUME
@@ -127,7 +132,6 @@ TOML_POP_WARNINGS;
#undef TOML_FLOAT_CHARCONV
#undef TOML_FLOAT128
#undef TOML_FLOAT16
-#undef TOML_FP16
#undef TOML_GCC
#undef TOML_HAS_ATTR
#undef TOML_HAS_BUILTIN
diff --git a/meson.build b/meson.build
index 4ec3c94..c815225 100644
--- a/meson.build
+++ b/meson.build
@@ -250,9 +250,6 @@ compiler_supports_char8_args = []
if is_gcc or is_clang
compiler_supports_char8_args += '-fchar8_t'
endif
-compiler_supports_char8_args_private = []
-compiler_supports_char8_args_private += compiler_supports_cpp20_args
-compiler_supports_char8_args_private += compiler_supports_char8_args
compiler_supports_char8 = compiler_supports_cpp20 and compiler.links('''
#include
#include
@@ -278,7 +275,7 @@ compiler_supports_char8 = compiler_supports_cpp20 and compiler.links('''
}
''',
name: 'supports char8_t',
- args: compiler_supports_char8_args_private
+ args: [ compiler_supports_cpp20_args, compiler_supports_char8_args ]
)
#######################################################################################################################
@@ -325,27 +322,6 @@ compiler_supports_consteval_properly = compiler_supports_consteval and not compi
# __fp16 and _Float16 checks
#######################################################################################################################
-float_16_preprocessor_single_check_template = '''
- #ifndef @0@
- #error @0@ wasn't defined!
- #else
- #pragma message("@0@: " MAKE_STRING(@0@))
- #endif
- #if @0@ != @1@
- #error @0@ was not @1@!
- #endif
-'''
-float_16_preprocessor_checks = '''
- #define MAKE_STRING(s) MAKE_STRING_1(s)
- #define MAKE_STRING_1(s) #s
- ''' + float_16_preprocessor_single_check_template.format('__FLT_RADIX__', '2') \
- + float_16_preprocessor_single_check_template.format('__FLT16_MANT_DIG__', '11') \
- + float_16_preprocessor_single_check_template.format('__FLT16_DIG__', '3') \
- + float_16_preprocessor_single_check_template.format('__FLT16_MIN_EXP__', '-13') \
- + float_16_preprocessor_single_check_template.format('__FLT16_MIN_10_EXP__', '-4') \
- + float_16_preprocessor_single_check_template.format('__FLT16_MAX_EXP__', '16') \
- + float_16_preprocessor_single_check_template.format('__FLT16_MAX_10_EXP__', '4')
-
compiler_supports_float16_args = []
if is_gcc
compiler_supports_float16_args += '-mfp16-format=ieee'
@@ -364,8 +340,6 @@ compiler_supports_fp16 = compiler.links('''
args: compiler_supports_float16_args
)
compiler_supports_float16 = compiler.links('''
- @0@
-
int main()
{
static_assert(sizeof(_Float16) == 2);
@@ -374,7 +348,7 @@ compiler_supports_float16 = compiler.links('''
const auto f3 = static_cast<_Float16>(0.2L);
return 0;
}
- '''.format(float_16_preprocessor_checks),
+ ''',
name: 'supports _Float16',
args: compiler_supports_float16_args
)
diff --git a/tests/conformance_burntsushi_invalid.cpp b/tests/conformance_burntsushi_invalid.cpp
index e25086d..a411414 100644
--- a/tests/conformance_burntsushi_invalid.cpp
+++ b/tests/conformance_burntsushi_invalid.cpp
@@ -430,16 +430,16 @@ zyx = 42)"sv;
zyx = 42)"sv;
static constexpr auto table_quoted_no_close = R"(["where will it end]
name = value)"sv;
- static constexpr auto table_redefine = R"(# Define b as int, and try to use it as a table: error
+ static constexpr auto table_redefine = R"(# Define b as int, and try to use it as a table: error
[a]
b = 1
[a.b]
c = 2)"sv;
- static constexpr auto table_rrbrace = R"([[table] ])"sv;
- static constexpr auto table_text_after_table = R"([error] this shouldn't be here)"sv;
- static constexpr auto table_whitespace = R"([invalid key])"sv;
- static constexpr auto table_with_pound = R"([key#group]
+ static constexpr auto table_rrbrace = R"([[table] ])"sv;
+ static constexpr auto table_text_after_table = R"([error] this shouldn't be here)"sv;
+ static constexpr auto table_whitespace = R"([invalid key])"sv;
+ static constexpr auto table_with_pound = R"([key#group]
answer = 42)"sv;
}
diff --git a/tests/impl_toml.cpp b/tests/impl_toml.cpp
index 41c3151..37c02a6 100644
--- a/tests/impl_toml.cpp
+++ b/tests/impl_toml.cpp
@@ -64,9 +64,6 @@ namespace toml
CHECK_CAN_REPRESENT_NATIVE(TOML_INT128, true);
CHECK_CAN_REPRESENT_NATIVE(TOML_UINT128, false);
#endif
-#ifdef TOML_FP16
- CHECK_CAN_REPRESENT_NATIVE(TOML_FP16, false);
-#endif
#ifdef TOML_FLOAT16
CHECK_CAN_REPRESENT_NATIVE(TOML_FLOAT16, false);
#endif
@@ -292,9 +289,6 @@ namespace toml
CHECK_INSERTED_AS(uint32_t, value);
CHECK_INSERTED_AS(float, value);
CHECK_INSERTED_AS(double, value);
-#ifdef TOML_FP16
- CHECK_INSERTED_AS(TOML_FP16, value);
-#endif
#ifdef TOML_FLOAT16
CHECK_INSERTED_AS(TOML_FLOAT16, value);
#endif
diff --git a/tests/meson.build b/tests/meson.build
index f4ab11e..6c3b811 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -40,10 +40,10 @@ endif
#######################################################################################################################
compiler_supports_fast_math_args = []
-if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
+if is_gcc or is_clang
compiler_supports_fast_math_args += '-ffast-math'
compiler_supports_fast_math_args += '-ffp-contract=fast'
-elif compiler.get_id() == 'msvc' or compiler.get_id() == 'intel-cl'
+elif is_msvc or is_icc_cl
compiler_supports_fast_math_args += '/fp:fast'
endif
compiler_supports_fast_math = compiler.links('''
@@ -186,13 +186,8 @@ foreach cpp20 : cpp20_modes
test_args += compiler_supports_fast_math_args
endif
- if compiler_supports_float16 or compiler_supports_fp16
- if compiler_supports_fp16
- test_args += '-DSHOULD_HAVE_FP16=1'
- endif
- if compiler_supports_float16
- test_args += '-DSHOULD_HAVE_FLOAT16=1'
- endif
+ if compiler_supports_float16
+ test_args += '-DSHOULD_HAVE_FLOAT16=1'
endif
if compiler_supports_int128
test_args += '-DSHOULD_HAVE_INT128=1'
diff --git a/tests/tests.h b/tests/tests.h
index b4f6a66..5756a27 100644
--- a/tests/tests.h
+++ b/tests/tests.h
@@ -11,9 +11,6 @@
#else
#include "../include/toml++/toml.h"
#endif
-#if defined(TOML_FP16) ^ SHOULD_HAVE_FP16
-#error TOML_FP16 was not deduced correctly
-#endif
#if defined(TOML_FLOAT16) ^ SHOULD_HAVE_FLOAT16
#error TOML_FLOAT16 was not deduced correctly
#endif
@@ -410,3 +407,20 @@ namespace Catch
extern template std::string stringify(const node_view&);
}
}
+
+#if TOML_CPP >= 20 && TOML_CLANG && TOML_CLANG <= 14 // https://github.com/llvm/llvm-project/issues/55560
+
+TOML_PUSH_WARNINGS;
+TOML_DISABLE_WARNINGS;
+
+namespace
+{
+ [[maybe_unused]] static std::u8string clang_string_workaround(const char8_t* a, const char8_t* b)
+ {
+ return { a, b };
+ }
+}
+
+TOML_POP_WARNINGS;
+
+#endif
diff --git a/toml.hpp b/toml.hpp
index c67e3f9..c71d32e 100644
--- a/toml.hpp
+++ b/toml.hpp
@@ -111,11 +111,42 @@
#else
#define TOML_INTELLISENSE 0
#endif
-#if defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64) || defined(__ARM_64BIT_STATE) \
- || defined(__arm__) || defined(_M_ARM) || defined(__ARM_32BIT_STATE)
-#define TOML_ARM 1
+
+// IA64
+#if defined(__ia64__) || defined(__ia64) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64)
+#define TOML_ARCH_ITANIUM 1
#else
-#define TOML_ARM 0
+#define TOML_ARCH_ITANIUM 0
+#endif
+
+// AMD64
+#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_AMD64)
+#define TOML_ARCH_AMD64 1
+#else
+#define TOML_ARCH_AMD64 0
+#endif
+
+// 32-bit x86
+#if defined(__i386__) || defined(_M_IX86)
+#define TOML_ARCH_X86 1
+#else
+#define TOML_ARCH_X86 0
+#endif
+
+// ARM
+#if defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(_M_ARM64) || defined(__ARM_64BIT_STATE) \
+ || defined(_M_ARM64EC)
+#define TOML_ARCH_ARM32 0
+#define TOML_ARCH_ARM64 1
+#define TOML_ARCH_ARM 1
+#elif defined(__arm__) || defined(_M_ARM) || defined(__ARM_32BIT_STATE)
+#define TOML_ARCH_ARM32 1
+#define TOML_ARCH_ARM64 0
+#define TOML_ARCH_ARM 1
+#else
+#define TOML_ARCH_ARM32 0
+#define TOML_ARCH_ARM64 0
+#define TOML_ARCH_ARM 0
#endif
// TOML_HAS_INCLUDE
@@ -898,39 +929,29 @@ TOML_ENABLE_WARNINGS;
TOML_REQUIRES(condition)
#define TOML_HIDDEN_CONSTRAINT(condition, ...) TOML_CONSTRAINED_TEMPLATE(condition, __VA_ARGS__)
-// clang-format off
+#if TOML_CLANG
+#if (TOML_ARCH_ARM || TOML_ARCH_X86 || TOML_ARCH_AMD64) && defined(__FLT16_MANT_DIG__)
+#define TOML_FLOAT16 _Float16
+#endif
+#elif TOML_GCC
+/*
-#ifdef __FLT16_MANT_DIG__
- #if __FLT_RADIX__ == 2 \
- && __FLT16_MANT_DIG__ == 11 \
- && __FLT16_DIG__ == 3 \
- && __FLT16_MIN_EXP__ == -13 \
- && __FLT16_MIN_10_EXP__ == -4 \
- && __FLT16_MAX_EXP__ == 16 \
- && __FLT16_MAX_10_EXP__ == 4
- #if TOML_ARM && (TOML_GCC || TOML_CLANG)
- #define TOML_FP16 __fp16
- #endif
- #if TOML_ARM && TOML_CLANG // not present in g++
- #define TOML_FLOAT16 _Float16
- #endif
- #endif
+ */
+#if (TOML_ARCH_ARM /*|| TOML_ARCH_X86 || TOML_ARCH_AMD64*/) && defined(__FLT16_MANT_DIG__)
+#define TOML_FLOAT16 _Float16
+#endif
#endif
-#if defined(__SIZEOF_FLOAT128__) \
- && defined(__FLT128_MANT_DIG__) \
- && defined(__LDBL_MANT_DIG__) \
+#if defined(__SIZEOF_FLOAT128__) && defined(__FLT128_MANT_DIG__) && defined(__LDBL_MANT_DIG__) \
&& __FLT128_MANT_DIG__ > __LDBL_MANT_DIG__
- #define TOML_FLOAT128 __float128
+#define TOML_FLOAT128 __float128
#endif
#ifdef __SIZEOF_INT128__
- #define TOML_INT128 __int128_t
- #define TOML_UINT128 __uint128_t
+#define TOML_INT128 __int128_t
+#define TOML_UINT128 __uint128_t
#endif
-// clang-format on
-
// clang-format off
//******** impl/version.h ********************************************************************************************
@@ -1678,11 +1699,6 @@ TOML_IMPL_NAMESPACE_START
template
struct float_traits : float_traits_base::digits, std::numeric_limits::digits10>
{};
-#ifdef TOML_FP16
- template <>
- struct float_traits : float_traits_base
- {};
-#endif
#ifdef TOML_FLOAT16
template <>
struct float_traits : float_traits_base
@@ -1704,11 +1720,6 @@ TOML_IMPL_NAMESPACE_START
template <>
struct value_traits : float_traits
{};
-#ifdef TOML_FP16
- template <>
- struct value_traits : float_traits
- {};
-#endif
#ifdef TOML_FLOAT16
template <>
struct value_traits : float_traits
@@ -17056,7 +17067,12 @@ TOML_POP_WARNINGS;
#undef TOML_ANON_NAMESPACE
#undef TOML_ANON_NAMESPACE_END
#undef TOML_ANON_NAMESPACE_START
-#undef TOML_ARM
+#undef TOML_ARCH_ARM
+#undef TOML_ARCH_AMD64
+#undef TOML_ARCH_ARM32
+#undef TOML_ARCH_ARM64
+#undef TOML_ARCH_ITANIUM
+#undef TOML_ARCH_X86
#undef TOML_ASSERT
#undef TOML_ASSERT_ASSUME
#undef TOML_ASSUME
@@ -17093,7 +17109,6 @@ TOML_POP_WARNINGS;
#undef TOML_FLOAT_CHARCONV
#undef TOML_FLOAT128
#undef TOML_FLOAT16
-#undef TOML_FP16
#undef TOML_GCC
#undef TOML_HAS_ATTR
#undef TOML_HAS_BUILTIN
diff --git a/vendor/catch.hpp b/vendor/catch.hpp
index d2a1242..9b309bd 100644
--- a/vendor/catch.hpp
+++ b/vendor/catch.hpp
@@ -1,6 +1,6 @@
/*
- * Catch v2.13.9
- * Generated: 2022-04-12 22:37:23.260201
+ * Catch v2.13.10
+ * Generated: 2022-10-16 11:01:23.452308
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved.
@@ -15,7 +15,7 @@
#define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 9
+#define CATCH_VERSION_PATCH 10
#ifdef __clang__
# pragma clang system_header
@@ -7395,8 +7395,6 @@ namespace Catch {
template
struct ObjectStorage
{
- using TStorage = typename std::aligned_storage::value>::type;
-
ObjectStorage() : data() {}
ObjectStorage(const ObjectStorage& other)
@@ -7439,7 +7437,7 @@ namespace Catch {
return *static_cast(static_cast(&data));
}
- TStorage data;
+ struct { alignas(T) unsigned char data[sizeof(T)]; } data;
};
}
@@ -7949,7 +7947,7 @@ namespace Catch {
#if defined(__i386__) || defined(__x86_64__)
#define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
#elif defined(__aarch64__)
- #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #define CATCH_TRAP() __asm__(".inst 0xd43e0000")
#endif
#elif defined(CATCH_PLATFORM_IPHONE)
@@ -13558,7 +13556,7 @@ namespace Catch {
// Handle list request
if( Option listed = list( m_config ) )
- return static_cast( *listed );
+ return (std::min) (MaxExitCode, static_cast(*listed));
TestGroup tests { m_config };
auto const totals = tests.execute();
@@ -15391,7 +15389,7 @@ namespace Catch {
}
Version const& libraryVersion() {
- static Version version( 2, 13, 9, "", 0 );
+ static Version version( 2, 13, 10, "", 0 );
return version;
}
@@ -17526,12 +17524,20 @@ namespace Catch {
#ifndef __OBJC__
+#ifndef CATCH_INTERNAL_CDECL
+#ifdef _MSC_VER
+#define CATCH_INTERNAL_CDECL __cdecl
+#else
+#define CATCH_INTERNAL_CDECL
+#endif
+#endif
+
#if defined(CATCH_CONFIG_WCHAR) && defined(CATCH_PLATFORM_WINDOWS) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN)
// Standard C/C++ Win32 Unicode wmain entry point
-extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) {
+extern "C" int CATCH_INTERNAL_CDECL wmain (int argc, wchar_t * argv[], wchar_t * []) {
#else
// Standard C/C++ main entry point
-int main (int argc, char * argv[]) {
+int CATCH_INTERNAL_CDECL main (int argc, char * argv[]) {
#endif
return Catch::Session().run( argc, argv );