Nico Rieck: this patch series fixes visibility issues on Windows as explained in <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html>.
llvm-svn: 188192
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: f0544c2086a1a592e294f24d62973ce732af33da
diff --git a/include/valarray b/include/valarray
index 71c8a74..d4e9015 100644
--- a/include/valarray
+++ b/include/valarray
@@ -354,9 +354,9 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-template<class _Tp> class _LIBCPP_TYPE_VIS valarray;
+template<class _Tp> class _LIBCPP_TYPE_VIS_ONLY valarray;
-class _LIBCPP_TYPE_VIS slice
+class _LIBCPP_TYPE_VIS_ONLY slice
{
size_t __start_;
size_t __size_;
@@ -381,11 +381,11 @@
_LIBCPP_INLINE_VISIBILITY size_t stride() const {return __stride_;}
};
-template <class _Tp> class _LIBCPP_TYPE_VIS slice_array;
+template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY slice_array;
class _LIBCPP_TYPE_VIS gslice;
-template <class _Tp> class _LIBCPP_TYPE_VIS gslice_array;
-template <class _Tp> class _LIBCPP_TYPE_VIS mask_array;
-template <class _Tp> class _LIBCPP_TYPE_VIS indirect_array;
+template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY gslice_array;
+template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY mask_array;
+template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY indirect_array;
template <class _Tp>
_LIBCPP_INLINE_VISIBILITY
@@ -671,7 +671,7 @@
_LIBCPP_INLINE_VISIBILITY
size_t size() const {return __size_;}
- template <class> friend class _LIBCPP_TYPE_VIS valarray;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray;
};
template <class _ValExpr>
@@ -786,7 +786,7 @@
struct __is_val_expr<valarray<_Tp> > : true_type {};
template<class _Tp>
-class _LIBCPP_TYPE_VIS valarray
+class _LIBCPP_TYPE_VIS_ONLY valarray
{
public:
typedef _Tp value_type;
@@ -976,12 +976,12 @@
void resize(size_t __n, value_type __x = value_type());
private:
- template <class> friend class _LIBCPP_TYPE_VIS valarray;
- template <class> friend class _LIBCPP_TYPE_VIS slice_array;
- template <class> friend class _LIBCPP_TYPE_VIS gslice_array;
- template <class> friend class _LIBCPP_TYPE_VIS mask_array;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY slice_array;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY gslice_array;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY mask_array;
template <class> friend class __mask_expr;
- template <class> friend class _LIBCPP_TYPE_VIS indirect_array;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY indirect_array;
template <class> friend class __indirect_expr;
template <class> friend class __val_expr;
@@ -1006,6 +1006,10 @@
end(const valarray<_Up>& __v);
};
+_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t))
+_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::~valarray())
+_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t))
+
template <class _Op, class _Tp>
struct _UnaryOp<_Op, valarray<_Tp> >
{
@@ -1091,7 +1095,7 @@
// slice_array
template <class _Tp>
-class _LIBCPP_TYPE_VIS slice_array
+class _LIBCPP_TYPE_VIS_ONLY slice_array
{
public:
typedef _Tp value_type;
@@ -1461,7 +1465,7 @@
// gslice_array
template <class _Tp>
-class _LIBCPP_TYPE_VIS gslice_array
+class _LIBCPP_TYPE_VIS_ONLY gslice_array
{
public:
typedef _Tp value_type;
@@ -1790,7 +1794,7 @@
// mask_array
template <class _Tp>
-class _LIBCPP_TYPE_VIS mask_array
+class _LIBCPP_TYPE_VIS_ONLY mask_array
{
public:
typedef _Tp value_type;
@@ -2134,7 +2138,7 @@
// indirect_array
template <class _Tp>
-class _LIBCPP_TYPE_VIS indirect_array
+class _LIBCPP_TYPE_VIS_ONLY indirect_array
{
public:
typedef _Tp value_type;
@@ -2485,7 +2489,7 @@
_LIBCPP_INLINE_VISIBILITY
size_t size() const {return __1d_.size();}
- template <class> friend class _LIBCPP_TYPE_VIS valarray;
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY valarray;
};
template<class _ValExpr>
@@ -4770,10 +4774,6 @@
return __v.__end_;
}
-_LIBCPP_EXTERN_TEMPLATE(valarray<size_t>::valarray(size_t))
-_LIBCPP_EXTERN_TEMPLATE(valarray<size_t>::~valarray())
-_LIBCPP_EXTERN_TEMPLATE(void valarray<size_t>::resize(size_t, size_t))
-
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_VALARRAY