diff options
| author | swarmer <[email protected]> | 2026-07-06 20:16:10 +0300 |
|---|---|---|
| committer | swarmer <[email protected]> | 2026-07-06 20:51:08 +0300 |
| commit | c0103a765a3d969af6adebc562976fefe3e2cd41 (patch) | |
| tree | dac81e1d4c02f588ffaf5ad939cf619b712a53c4 | |
| parent | 419745c91be602ca853b51cf7e6cb08164375122 (diff) | |
Use trivial_abi in THolder
Apply trivial_abi to THolder so it can be passed directly in registers instead of through an invisible reference to caller-allocated memory.
commit_hash:b63c37dd510deb46bb146c54dbab6daa91db588a
| -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. |
