From 1d79683ea8d64b2f4fffc68c66624096595c3575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Thu, 30 Sep 2021 20:10:56 +0200 Subject: [PATCH] Add [[trivial_abi]] to Detail::unique_ptr when compiled with Clang This decreases code size and improves performance of passing around `unique_ptr` instances by value somewhat. It virtually guarantees problems when combining code compiled with Clang and GCC, but that was never supported anyway. --- src/catch2/internal/catch_unique_ptr.hpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/catch2/internal/catch_unique_ptr.hpp b/src/catch2/internal/catch_unique_ptr.hpp index d3bc8417..6200542b 100644 --- a/src/catch2/internal/catch_unique_ptr.hpp +++ b/src/catch2/internal/catch_unique_ptr.hpp @@ -11,13 +11,22 @@ #include #include +#if defined(__clang__) && defined(__has_attribute) +# if __has_attribute(trivial_abi) +# define TRIVIAL_ABI [[clang::trivial_abi]] +# endif +#endif +#if !defined(TRIVIAL_ABI) +# define TRIVIAL_ABI +#endif + namespace Catch { namespace Detail { // reimplementation of unique_ptr for improved compilation times // Does not support custom deleters (and thus does not require EBO) // Does not support arrays template - class unique_ptr { + class TRIVIAL_ABI unique_ptr { T* m_ptr; public: constexpr unique_ptr(std::nullptr_t = nullptr):