Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id EC819200C55 for ; Thu, 30 Mar 2017 01:53:16 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id EB014160B95; Wed, 29 Mar 2017 23:53:16 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E6A6C160B8A for ; Thu, 30 Mar 2017 01:53:15 +0200 (CEST) Received: (qmail 88081 invoked by uid 500); 29 Mar 2017 23:53:15 -0000 Mailing-List: contact commits-help@arrow.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@arrow.apache.org Delivered-To: mailing list commits@arrow.apache.org Received: (qmail 88071 invoked by uid 99); 29 Mar 2017 23:53:15 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Mar 2017 23:53:15 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 10A53DFBED; Wed, 29 Mar 2017 23:53:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: wesm@apache.org To: commits@arrow.apache.org Message-Id: <5107ba58a2274fae8c1f1088c176b245@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: arrow git commit: ARROW-627: [C++] Add compatibility macros for exported extern templates Date: Wed, 29 Mar 2017 23:53:15 +0000 (UTC) archived-at: Wed, 29 Mar 2017 23:53:17 -0000 Repository: arrow Updated Branches: refs/heads/master 8f386374e -> f7b287a28 ARROW-627: [C++] Add compatibility macros for exported extern templates This should also reduce compiler warnings on MSVC Author: Wes McKinney Closes #447 from wesm/ARROW-627 and squashes the following commits: 3f6277d [Wes McKinney] Wrong define for msvc b53a400 [Wes McKinney] MSVC needs export annotation when instantiating templates 8a9fcb4 [Wes McKinney] Add compatibility macros for exported extern templates, also to reduce compiler warnings in MSVC Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/f7b287a2 Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/f7b287a2 Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/f7b287a2 Branch: refs/heads/master Commit: f7b287a28d62c6b246665da7eee50fe222ebaaeb Parents: 8f38637 Author: Wes McKinney Authored: Wed Mar 29 19:53:08 2017 -0400 Committer: Wes McKinney Committed: Wed Mar 29 19:53:08 2017 -0400 ---------------------------------------------------------------------- cpp/src/arrow/array.cc | 32 +++++++++++++-------------- cpp/src/arrow/array.h | 43 ++++++++++++++---------------------- cpp/src/arrow/tensor.cc | 22 +++++++++--------- cpp/src/arrow/tensor.h | 33 +++++++++------------------ cpp/src/arrow/type.h | 4 ++-- cpp/src/arrow/util/visibility.h | 17 ++++++++++++++ 6 files changed, 73 insertions(+), 78 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/array.cc ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/array.cc b/cpp/src/arrow/array.cc index 3ea0333..b25411a 100644 --- a/cpp/src/arrow/array.cc +++ b/cpp/src/arrow/array.cc @@ -445,21 +445,21 @@ Status Array::Accept(ArrayVisitor* visitor) const { // ---------------------------------------------------------------------- // Instantiate templates -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; -template class NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; +template class ARROW_TEMPLATE_EXPORT NumericArray; } // namespace arrow http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/array.h ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/array.h b/cpp/src/arrow/array.h index c0ec571..53b6408 100644 --- a/cpp/src/arrow/array.h +++ b/cpp/src/arrow/array.h @@ -483,34 +483,23 @@ class ARROW_EXPORT DictionaryArray : public Array { // ---------------------------------------------------------------------- // extern templates and other details -// gcc and clang disagree about how to handle template visibility when you have -// explicit specializations https://llvm.org/bugs/show_bug.cgi?id=24815 -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wattributes" -#endif - // Only instantiate these templates once -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; -extern template class ARROW_EXPORT NumericArray; - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; +ARROW_EXTERN_TEMPLATE NumericArray; } // namespace arrow http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/tensor.cc ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/tensor.cc b/cpp/src/arrow/tensor.cc index 6489cd0..7c4593f 100644 --- a/cpp/src/arrow/tensor.cc +++ b/cpp/src/arrow/tensor.cc @@ -100,16 +100,16 @@ NumericTensor::NumericTensor(const std::shared_ptr& data, const std::vector& shape, const std::vector& strides) : NumericTensor(data, shape, strides, {}) {} -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; -template class NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; +template class ARROW_TEMPLATE_EXPORT NumericTensor; } // namespace arrow http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/tensor.h ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/tensor.h b/cpp/src/arrow/tensor.h index 0059368..7bee867 100644 --- a/cpp/src/arrow/tensor.h +++ b/cpp/src/arrow/tensor.h @@ -129,29 +129,18 @@ class ARROW_EXPORT NumericTensor : public Tensor { // ---------------------------------------------------------------------- // extern templates and other details -// gcc and clang disagree about how to handle template visibility when you have -// explicit specializations https://llvm.org/bugs/show_bug.cgi?id=24815 -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wattributes" -#endif - // Only instantiate these templates once -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; -extern template class ARROW_EXPORT NumericTensor; - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; +ARROW_EXTERN_TEMPLATE NumericTensor; } // namespace arrow http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/type.h ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/type.h b/cpp/src/arrow/type.h index dc50ecd..2a73f6b 100644 --- a/cpp/src/arrow/type.h +++ b/cpp/src/arrow/type.h @@ -439,7 +439,7 @@ struct ARROW_EXPORT UnionType : public NestedType { enum class DateUnit : char { DAY = 0, MILLI = 1 }; -struct DateType : public FixedWidthType { +struct ARROW_EXPORT DateType : public FixedWidthType { public: DateUnit unit; @@ -496,7 +496,7 @@ static inline std::ostream& operator<<(std::ostream& os, TimeUnit unit) { return os; } -struct TimeType : public FixedWidthType { +struct ARROW_EXPORT TimeType : public FixedWidthType { public: TimeUnit unit; http://git-wip-us.apache.org/repos/asf/arrow/blob/f7b287a2/cpp/src/arrow/util/visibility.h ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/util/visibility.h b/cpp/src/arrow/util/visibility.h index 4819a00..6382f7f 100644 --- a/cpp/src/arrow/util/visibility.h +++ b/cpp/src/arrow/util/visibility.h @@ -35,4 +35,21 @@ #endif #endif // Non-Windows +// gcc and clang disagree about how to handle template visibility when you have +// explicit specializations https://llvm.org/bugs/show_bug.cgi?id=24815 + +#if defined(__clang__) + #define ARROW_EXTERN_TEMPLATE extern template class ARROW_EXPORT +#else + #define ARROW_EXTERN_TEMPLATE extern template class +#endif + +// This is a complicated topic, some reading on it: +// http://www.codesynthesis.com/~boris/blog/2010/01/18/dll-export-cxx-templates/ +#if defined(_MSC_VER) + #define ARROW_TEMPLATE_EXPORT ARROW_EXPORT +#else + #define ARROW_TEMPLATE_EXPORT +#endif + #endif // ARROW_UTIL_VISIBILITY_H