Skip to content
This repository has been archived by the owner on Nov 1, 2021. It is now read-only.

Commit

Permalink
Revert "isPodLike: more precise"
Browse files Browse the repository at this point in the history
This reverts commit c45f2af.

Looks like it may be causing a failure, I'll revert for now.

                 from
lib/CodeGen/AsmPrinter/DwarfDebug.cpp:14:
/usr/include/c++/4.9.2/bits/stl_pair.h: In instantiation of
                 'std::pair<_T1, _T2>& std::pair<_T1,
                 _T2>::operator=(const std::pair<_T1, _T2>&) [with _T1 =
                 std::unique_ptr<llvm::DwarfTypeUnit>; _T2 = const
                 llvm::DICompositeType*]':

/usr/include/c++/4.9.2/bits/stl_pair.h:160:8: error: use of deleted
function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp,
_Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp =
llvm::DwarfTypeUnit; _Dp = std::default_delete<llvm::DwarfTypeUnit>]'
  first = __p.first;
        ^

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264544 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
jfbastien committed Mar 27, 2016
1 parent 044daf4 commit ce54d8e
Showing 1 changed file with 9 additions and 13 deletions.
22 changes: 9 additions & 13 deletions include/llvm/Support/type_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@

namespace llvm {

/// Type trait used to determine whether a given type can be copied around with
/// memcpy instead of running ctors.
template <typename T> struct isPodLike {
// std::is_trivially_copyable is available in libc++ with clang, libstdc++
// that comes with GCC 5.
/// isPodLike - This is a type trait that is used to determine whether a given
/// type can be copied around with memcpy instead of running ctors etc.
template <typename T>
struct isPodLike {
// std::is_trivially_copyable is available in libc++ with clang, libstdc++
// that comes with GCC 5.
#if (__has_feature(is_trivially_copyable) && defined(_LIBCPP_VERSION)) || \
(defined(__GNUC__) && __GNUC__ >= 5)
// If the compiler supports the is_trivially_copyable trait use it, as it
Expand All @@ -39,15 +40,10 @@ template <typename T> struct isPodLike {
// 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);
#elif defined(__GNUC__)
// Fallback to ye olden compiler intrinsic, which isn't as accurate as the new
// one but more widely supported.
static const bool value = __has_trivial_copy(T);
#else
// If we really don't know anything else is_pod will do, is widely supported,
// but is too strict (e.g. a user-defined ctor doesn't prevent trivial copy
// but prevents POD-ness).
static const bool value = std::is_pod<T>::value;
// If we don't know anything else, we can (at least) assume that all non-class
// types are PODs.
static const bool value = !std::is_class<T>::value;
#endif
};

Expand Down

0 comments on commit ce54d8e

Please sign in to comment.