[llvm] r230021 - Base isPodLike on is_trivially_copyable for GCC 5 and MSVC

Chandler Carruth chandlerc at google.com
Fri Feb 20 08:35:53 PST 2015


I think we end up relying on this for more than just copyable. We also skip
destructor calls in some places etc.

Would it be better to change the users of this to use the more precise
names? We can provide wrappers with version checks and defaulr fallbacks
based on explicit specializations of the old trait.

Thoughts?
On Feb 20, 2015 8:26 AM, "Benjamin Kramer" <benny.kra at googlemail.com> wrote:

> Author: d0k
> Date: Fri Feb 20 10:19:28 2015
> New Revision: 230021
>
> URL: http://llvm.org/viewvc/llvm-project?rev=230021&view=rev
> Log:
> Base isPodLike on is_trivially_copyable for GCC 5 and MSVC
>
> It would be nice to get rid of the version checks here, but that will
> have to wait until libstdc++ is upgraded to 5.0 everywhere ...
>
> Modified:
>     llvm/trunk/include/llvm/Support/type_traits.h
>
> Modified: llvm/trunk/include/llvm/Support/type_traits.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/type_traits.h?rev=230021&r1=230020&r2=230021&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/type_traits.h (original)
> +++ llvm/trunk/include/llvm/Support/type_traits.h Fri Feb 20 10:19:28 2015
> @@ -28,9 +28,17 @@ namespace llvm {
>  /// type can be copied around with memcpy instead of running ctors etc.
>  template <typename T>
>  struct isPodLike {
> -#if __has_feature(is_trivially_copyable)
> +  // std::is_trivially copyable is available in libc++ with clang,
> libstdc++
> +  // that comes with GCC 5 and MSVC 2013.
> +#if (__has_feature(is_trivially_copyable) && defined(_LIBCPP_VERSION))
> ||      \
> +    (defined(__GNUC__) && __GNUC__ >= 5) || defined(_MSC_VER)
>    // If the compiler supports the is_trivially_copyable trait use it, as
> it
>    // matches the definition of isPodLike closely.
> +  static const bool value = std::is_trivially_copyable<T>::value;
> +#elif __has_feature(is_trivially_copyable)
> +  // Use the internal name if the compiler supports is_trivially_copyable
> but we
> +  // don't know if the standard library does. This is the case for clang
> in
> +  // conjunction with libstdc++ from GCC 4.x.
>    static const bool value = __is_trivially_copyable(T);
>  #else
>    // If we don't know anything else, we can (at least) assume that all
> non-class
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150220/1e11fb03/attachment.html>


More information about the llvm-commits mailing list