diff options
| -rw-r--r-- | util/generic/fwd.h | 2 | ||||
| -rw-r--r-- | util/generic/ptr.h | 2 | ||||
| -rw-r--r-- | util/system/compiler.h | 13 |
3 files changed, 15 insertions, 2 deletions
diff --git a/util/generic/fwd.h b/util/generic/fwd.h index d07deeb37d6..cfc98dd9902 100644 --- a/util/generic/fwd.h +++ b/util/generic/fwd.h @@ -101,7 +101,7 @@ template <class T, class D = TDelete> class TAutoPtr; template <class T, class D = TDelete> -class THolder; +class Y_TRIVIAL_ABI THolder; template <class T, class C, class D = TDelete> class TRefCounted; diff --git a/util/generic/ptr.h b/util/generic/ptr.h index 04cfe50a425..7219a1c85ca 100644 --- a/util/generic/ptr.h +++ b/util/generic/ptr.h @@ -260,7 +260,7 @@ private: }; template <class T, class D> -class THolder: public TPointerBase<THolder<T, D>, T> { +class Y_TRIVIAL_ABI THolder: public TPointerBase<THolder<T, D>, T> { public: constexpr THolder() noexcept : T_(nullptr) diff --git a/util/system/compiler.h b/util/system/compiler.h index db4416a6c65..e716438b97c 100644 --- a/util/system/compiler.h +++ b/util/system/compiler.h @@ -839,6 +839,19 @@ Y_FORCE_INLINE void DoNotOptimizeAway(const T&) = delete; #endif /** + * @def Y_TRIVIAL_ABI + * + * Indicates that a class or structure can be considered trivial for the purpose of calls. + * + * @see https://clang.llvm.org/docs/AttributeReference.html#trivial-abi + */ +#if Y_HAS_CPP_ATTRIBUTE(clang::trivial_abi) + #define Y_TRIVIAL_ABI [[clang::trivial_abi]] +#else + #define Y_TRIVIAL_ABI +#endif + +/** * @def Y_CORO_AWAIT_ELIDABLE * * A class attribute which can be applied to a coroutine return type. |
