[PATCH] D24991: Inline hot functions in libcxx shared_ptr implementation.

Eric Fiselier via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Jan 14 03:22:22 PST 2017

EricWF requested changes to this revision.
EricWF added a comment.
This revision now requires changes to proceed.

Almost LGTM. Just a couple of inline comments left. Thanks for working on this!

Comment at: libcxx/include/memory:3691
+                       && __has_builtin(__atomic_compare_exchange_n) \
+                       && defined(__ATOMIC_RELAXED)                  \
+                       && defined(__ATOMIC_CONSUME)                  \
1. I would reduce these checks down to only what we need in the headers.
2. I would rename `_LIBCPP_HAS_ATOMIC_BUILTINS` to `_LIBCPP_HAS_BUILTIN_ATOMIC_SUPPORT` so it doesn't conflict with `atomic_support.h` and so we don't get it confused with all of the other `_LIBCPP_ATOMIC` configuration macros.
3.  This is missing the configuration checks for GCC. Specifically `#elif !defined(__clang__) && defined(_GNUC_VER) && _GNUC_VER >= 407`

Comment at: libcxx/include/memory:3701
+template <class T>
+inline T
+__libcpp_atomic_refcount_increment(T& t) _NOEXCEPT

Comment at: libcxx/include/memory:3759
+    void _LIBCPP_FUNC_VIS __add_shared() _NOEXCEPT;
+    bool _LIBCPP_FUNC_VIS __release_shared() _NOEXCEPT;
`_LIBCPP_FUNC_VIS` goes before the return type.

Comment at: libcxx/include/memory:3797
+    void _LIBCPP_FUNC_VIS __add_shared() _NOEXCEPT;
+    void _LIBCPP_FUNC_VIS __add_weak() _NOEXCEPT;
+    void _LIBCPP_FUNC_VIS __release_shared() _NOEXCEPT;
`_LIBCPP_FUNC_VIS` goes before the return type.



More information about the cfe-commits mailing list