summaryrefslogtreecommitdiffstats
path: root/libcxx/include/mutex
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2017-03-02 03:22:18 +0000
committerShoaib Meenai <smeenai@fb.com>2017-03-02 03:22:18 +0000
commitbda3c7df78501378a54e3c4a44d49376d6a2cdda (patch)
treedfd60ecac68e2dbc079c855fdb03cb63fb9ae8f2 /libcxx/include/mutex
parentbad28c44eb1df72ede59c1a56e09b4a2f34688c3 (diff)
downloadbcm5719-llvm-bda3c7df78501378a54e3c4a44d49376d6a2cdda.tar.gz
bcm5719-llvm-bda3c7df78501378a54e3c4a44d49376d6a2cdda.zip
[libc++] Make _LIBCPP_TYPE_VIS export members
Summary: Most classes annotated with _LIBCPP_TYPE_VIS need to have at least some of their members exported, otherwise we have a lot of link errors when linking against a libc++ built with hidden visibility. This also makes _LIBCPP_TYPE_VIS be consistent across platforms, since on Windows it already exports members. With this change made, any template methods of a class marked _LIBCPP_TYPE_VIS will also get default visibility when instantiatied, which is not desirable for clients of libc++ headers who wish to control their visibility; this is the same issue as PR30642. Annotate all problematic methods with an explicit visibility specifier to avoid this. The problematic methods were found by running bad-visibility-finder [1] against the libc++ headers after making the _LIBCPP_TYPE_VIS change. The small methods were marked for inlining; the larger ones hidden. [1] https://github.com/smeenai/bad-visibility-finder Reviewers: mclow.lists, EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25208 llvm-svn: 296732
Diffstat (limited to 'libcxx/include/mutex')
-rw-r--r--libcxx/include/mutex2
1 files changed, 2 insertions, 0 deletions
diff --git a/libcxx/include/mutex b/libcxx/include/mutex
index 8526533f140..11b0f7e5292 100644
--- a/libcxx/include/mutex
+++ b/libcxx/include/mutex
@@ -248,6 +248,7 @@ public:
bool try_lock_for(const chrono::duration<_Rep, _Period>& __d)
{return try_lock_until(chrono::steady_clock::now() + __d);}
template <class _Clock, class _Duration>
+ _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
bool try_lock_until(const chrono::time_point<_Clock, _Duration>& __t);
void unlock() _NOEXCEPT;
};
@@ -291,6 +292,7 @@ public:
bool try_lock_for(const chrono::duration<_Rep, _Period>& __d)
{return try_lock_until(chrono::steady_clock::now() + __d);}
template <class _Clock, class _Duration>
+ _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
bool try_lock_until(const chrono::time_point<_Clock, _Duration>& __t);
void unlock() _NOEXCEPT;
};
OpenPOWER on IntegriCloud