r351701 - Replace llvm::isPodLike<...> by llvm::is_trivially_copyable<...>

Hubert Tong via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 22 20:56:52 PST 2019


I am also hitting this. GCC 4.8 is still the minimum at this time.

-- HT

On Tue, Jan 22, 2019 at 8:10 AM Axel Naumann via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Hi,
>
> This broke our clang builds with
>
> $ gcc --version
> gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
>
> on CentOS Linux release 7.6.1810 (Core),
>
> [ 23%] Building CXX object
> tools/clang/lib/Basic/CMakeFiles/clangBasic.dir/Module.cpp.o
>
> In file included from include/llvm/ADT/StringMap.h:20:0,
>                  from include/llvm/Support/Host.h:16,
>                  from include/llvm/ADT/Hashing.h:48,
>                  from include/llvm/ADT/ArrayRef.h:12,
>                  from include/llvm/ADT/DenseMapInfo.h:16,
>                  from include/llvm/ADT/DenseMap.h:16,
>                  from tools/clang/include/clang/Basic/FileManager.h:19,
>                  from tools/clang/include/clang/Basic/Module.h:18,
>                  from tools/clang/lib/Basic/Module.cpp:14:
> include/llvm/Support/PointerLikeTypeTraits.h: In instantiation of
> ‘struct llvm::PointerLikeTypeTraits<clang::Module*>’:
> /usr/include/c++/4.8.2/type_traits:1087:41:   required by substitution
> of ‘template<class _Tp1, class _Up1> static decltype
> (((declval<_Tp1>)()=(declval<_Up1>)(), std::__sfinae_types::__one()))
> std::__is_assignable_helper<_Tp, _Up>::__test(int) [with _Tp1 = _Tp1;
> _Up1 = _Up1; _Tp =
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&; _Up = const
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&] [with _Tp1 =
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&; _Up1 = const
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&]’
> /usr/include/c++/4.8.2/type_traits:1094:50:   required from ‘constexpr
> const bool
>
> std::__is_assignable_helper<llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*,
> 1u, bool> >&, const
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&>::value’
> /usr/include/c++/4.8.2/type_traits:1099:12:   required from ‘struct
>
> std::is_assignable<llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*,
> 1u, bool> >&, const
> llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >&>’
> /usr/include/c++/4.8.2/type_traits:1112:12:   required from ‘struct
>
> std::__is_copy_assignable_impl<llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*,
> 1u, bool> >, false>’
> /usr/include/c++/4.8.2/type_traits:1118:12:   required from ‘struct
>
> std::is_copy_assignable<llvm::detail::trivial_helper<llvm::PointerIntPair<clang::Module*,
> 1u, bool> > >’
> include/llvm/Support/type_traits.h:142:25:   required from ‘constexpr
> const bool
> llvm::is_trivially_copyable<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >::has_trivial_copy_assign’
> include/llvm/Support/type_traits.h:163:32:   required from ‘constexpr
> const bool
> llvm::is_trivially_copyable<llvm::PointerIntPair<clang::Module*, 1u,
> bool> >::value’
> include/llvm/ADT/SmallVector.h:321:7:   required from ‘class
> llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Module*, 1u, bool> >’
> include/llvm/ADT/SmallVector.h:845:7:   required from ‘class
> llvm::SmallVector<llvm::PointerIntPair<clang::Module*, 1u, bool>, 2u>’
> tools/clang/include/clang/Basic/Module.h:290:30:   required from here
> include/llvm/Support/PointerLikeTypeTraits.h:59:8: error: invalid
> application of ‘__alignof__’ to incomplete type ‘clang::Module’
>    enum { NumLowBitsAvailable = detail::ConstantLog2<alignof(T)>::value };
>         ^
>
> FYI in case you wonder:
>
> $ ls -l /usr/include/c++/
> total 8
> drwxr-xr-x. 12 root root 4096 Dec 11 03:24 4.8.2
> lrwxrwxrwx.  1 root root    5 Dec 11 03:24 4.8.5 -> 4.8.2
>
>
> Are we outside the "allowed" range for GCC versions?
>
> Cheers, Axel.
>
> On 1/20/19 10:19 PM, Serge Guelton via cfe-commits wrote:
> > Author: serge_sans_paille
> > Date: Sun Jan 20 13:19:56 2019
> > New Revision: 351701
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=351701&view=rev
> > Log:
> > Replace llvm::isPodLike<...>  by llvm::is_trivially_copyable<...>
> >
> > As noted in https://bugs.llvm.org/show_bug.cgi?id=36651, the
> specialization for
> > isPodLike<std::pair<...>> did not match the expectation of
> > std::is_trivially_copyable which makes the memcpy optimization invalid.
> >
> > This patch renames the llvm::isPodLike trait into
> llvm::is_trivially_copyable.
> > Unfortunately std::is_trivially_copyable is not portable across compiler
> / STL
> > versions. So a portable version is provided too.
> >
> > Note that the following specialization were invalid:
> >
> >     std::pair<T0, T1>
> >     llvm::Optional<T>
> >
> > Tests have been added to assert that former specialization are respected
> by the
> > standard usage of llvm::is_trivially_copyable, and that when a decent
> version
> > of std::is_trivially_copyable is available, llvm::is_trivially_copyable
> is
> > compared to std::is_trivially_copyable.
> >
> > As of this patch, llvm::Optional is no longer considered trivially
> copyable,
> > even if T is. This is to be fixed in a later patch, as it has impact on a
> > long-running bug (see r347004)
> >
> > Note that GCC warns about this UB, but this got silented by
> https://reviews.llvm.org/D50296.
> >
> > Differential Revision: https://reviews.llvm.org/D54472
> >
> >
> > Modified:
> >     cfe/trunk/include/clang/AST/BaseSubobject.h
> >     cfe/trunk/include/clang/AST/CharUnits.h
> >     cfe/trunk/include/clang/AST/DeclAccessPair.h
> >     cfe/trunk/include/clang/AST/DeclarationName.h
> >     cfe/trunk/include/clang/AST/ExprObjC.h
> >     cfe/trunk/include/clang/AST/GlobalDecl.h
> >     cfe/trunk/include/clang/AST/Type.h
> >     cfe/trunk/include/clang/Analysis/ProgramPoint.h
> >     cfe/trunk/include/clang/Basic/IdentifierTable.h
> >     cfe/trunk/include/clang/Basic/SourceLocation.h
> >     cfe/trunk/include/clang/Lex/Token.h
> >     cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h
> >     cfe/trunk/include/clang/Sema/Ownership.h
> >     cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
> >     cfe/trunk/lib/AST/VTableBuilder.cpp
> >     cfe/trunk/lib/Sema/SemaChecking.cpp
> >     cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp
> >     cfe/trunk/test/Analysis/llvm-conventions.cpp
> >     cfe/trunk/tools/libclang/Indexing.cpp
> >
> > Modified: cfe/trunk/include/clang/AST/BaseSubobject.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/BaseSubobject.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/BaseSubobject.h (original)
> > +++ cfe/trunk/include/clang/AST/BaseSubobject.h Sun Jan 20 13:19:56 2019
> > @@ -80,11 +80,6 @@ template<> struct DenseMapInfo<clang::Ba
> >    }
> >  };
> >
> > -// It's OK to treat BaseSubobject as a POD type.
> > -template <> struct isPodLike<clang::BaseSubobject> {
> > -  static const bool value = true;
> > -};
> > -
> >  } // namespace llvm
> >
> >  #endif // LLVM_CLANG_AST_BASESUBOBJECT_H
> >
> > Modified: cfe/trunk/include/clang/AST/CharUnits.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CharUnits.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/CharUnits.h (original)
> > +++ cfe/trunk/include/clang/AST/CharUnits.h Sun Jan 20 13:19:56 2019
> > @@ -237,10 +237,6 @@ template<> struct DenseMapInfo<clang::Ch
> >    }
> >  };
> >
> > -template <> struct isPodLike<clang::CharUnits> {
> > -  static const bool value = true;
> > -};
> > -
> >  } // end namespace llvm
> >
> >  #endif // LLVM_CLANG_AST_CHARUNITS_H
> >
> > Modified: cfe/trunk/include/clang/AST/DeclAccessPair.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclAccessPair.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/DeclAccessPair.h (original)
> > +++ cfe/trunk/include/clang/AST/DeclAccessPair.h Sun Jan 20 13:19:56 2019
> > @@ -60,12 +60,4 @@ public:
> >  };
> >  }
> >
> > -// Take a moment to tell SmallVector that DeclAccessPair is POD.
> > -namespace llvm {
> > -template<typename> struct isPodLike;
> > -template<> struct isPodLike<clang::DeclAccessPair> {
> > -   static const bool value = true;
> > -};
> > -}
> > -
> >  #endif
> >
> > Modified: cfe/trunk/include/clang/AST/DeclarationName.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclarationName.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/DeclarationName.h (original)
> > +++ cfe/trunk/include/clang/AST/DeclarationName.h Sun Jan 20 13:19:56
> 2019
> > @@ -861,9 +861,6 @@ struct DenseMapInfo<clang::DeclarationNa
> >    }
> >  };
> >
> > -template <>
> > -struct isPodLike<clang::DeclarationName> { static const bool value =
> true; };
> > -
> >  } // namespace llvm
> >
> >  #endif // LLVM_CLANG_AST_DECLARATIONNAME_H
> >
> > Modified: cfe/trunk/include/clang/AST/ExprObjC.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprObjC.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/ExprObjC.h (original)
> > +++ cfe/trunk/include/clang/AST/ExprObjC.h Sun Jan 20 13:19:56 2019
> > @@ -255,12 +255,6 @@ struct ObjCDictionaryElement {
> >
> >  } // namespace clang
> >
> > -namespace llvm {
> > -
> > -template <> struct isPodLike<clang::ObjCDictionaryElement> :
> std::true_type {};
> > -
> > -} // namespace llvm
> > -
> >  namespace clang {
> >
> >  /// Internal struct for storing Key/value pair.
> >
> > Modified: cfe/trunk/include/clang/AST/GlobalDecl.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/GlobalDecl.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/GlobalDecl.h (original)
> > +++ cfe/trunk/include/clang/AST/GlobalDecl.h Sun Jan 20 13:19:56 2019
> > @@ -139,13 +139,6 @@ namespace llvm {
> >      }
> >    };
> >
> > -  // GlobalDecl isn't *technically* a POD type. However, its copy
> constructor,
> > -  // copy assignment operator, and destructor are all trivial.
> > -  template <>
> > -  struct isPodLike<clang::GlobalDecl> {
> > -    static const bool value = true;
> > -  };
> > -
> >  } // namespace llvm
> >
> >  #endif // LLVM_CLANG_AST_GLOBALDECL_H
> >
> > Modified: cfe/trunk/include/clang/AST/Type.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/Type.h (original)
> > +++ cfe/trunk/include/clang/AST/Type.h Sun Jan 20 13:19:56 2019
> > @@ -94,9 +94,6 @@ namespace llvm {
> >      enum { NumLowBitsAvailable = clang::TypeAlignmentInBits };
> >    };
> >
> > -  template <>
> > -  struct isPodLike<clang::QualType> { static const bool value = true; };
> > -
> >  } // namespace llvm
> >
> >  namespace clang {
> >
> > Modified: cfe/trunk/include/clang/Analysis/ProgramPoint.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/ProgramPoint.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Analysis/ProgramPoint.h (original)
> > +++ cfe/trunk/include/clang/Analysis/ProgramPoint.h Sun Jan 20 13:19:56
> 2019
> > @@ -777,9 +777,6 @@ static bool isEqual(const clang::Program
> >
> >  };
> >
> > -template <>
> > -struct isPodLike<clang::ProgramPoint> { static const bool value = true;
> };
> > -
> >  } // end namespace llvm
> >
> >  #endif
> >
> > Modified: cfe/trunk/include/clang/Basic/IdentifierTable.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/IdentifierTable.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/IdentifierTable.h (original)
> > +++ cfe/trunk/include/clang/Basic/IdentifierTable.h Sun Jan 20 13:19:56
> 2019
> > @@ -938,9 +938,6 @@ struct DenseMapInfo<clang::Selector> {
> >    }
> >  };
> >
> > -template <>
> > -struct isPodLike<clang::Selector> { static const bool value = true; };
> > -
> >  template<>
> >  struct PointerLikeTypeTraits<clang::Selector> {
> >    static const void *getAsVoidPointer(clang::Selector P) {
> >
> > Modified: cfe/trunk/include/clang/Basic/SourceLocation.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/SourceLocation.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/SourceLocation.h (original)
> > +++ cfe/trunk/include/clang/Basic/SourceLocation.h Sun Jan 20 13:19:56
> 2019
> > @@ -25,7 +25,6 @@
> >  namespace llvm {
> >
> >  template <typename T> struct DenseMapInfo;
> > -template <typename T> struct isPodLike;
> >
> >  } // namespace llvm
> >
> > @@ -457,11 +456,6 @@ namespace llvm {
> >      }
> >    };
> >
> > -  template <>
> > -  struct isPodLike<clang::SourceLocation> { static const bool value =
> true; };
> > -  template <>
> > -  struct isPodLike<clang::FileID> { static const bool value = true; };
> > -
> >    // Teach SmallPtrSet how to handle SourceLocation.
> >    template<>
> >    struct PointerLikeTypeTraits<clang::SourceLocation> {
> >
> > Modified: cfe/trunk/include/clang/Lex/Token.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Token.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Lex/Token.h (original)
> > +++ cfe/trunk/include/clang/Lex/Token.h Sun Jan 20 13:19:56 2019
> > @@ -328,9 +328,4 @@ struct PPConditionalInfo {
> >
> >  } // end namespace clang
> >
> > -namespace llvm {
> > -  template <>
> > -  struct isPodLike<clang::Token> { static const bool value = true; };
> > -} // end namespace llvm
> > -
> >  #endif // LLVM_CLANG_LEX_TOKEN_H
> >
> > Modified: cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h (original)
> > +++ cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h Sun Jan 20
> 13:19:56 2019
> > @@ -655,14 +655,6 @@ public:
> >
> >  } // namespace clang
> >
> > -namespace llvm {
> > -
> > -template <> struct isPodLike<clang::CodeCompletionString::Chunk> {
> > -  static const bool value = true;
> > -};
> > -
> > -} // namespace llvm
> > -
> >  namespace clang {
> >
> >  /// A builder class used to construct new code-completion strings.
> >
> > Modified: cfe/trunk/include/clang/Sema/Ownership.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Ownership.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Sema/Ownership.h (original)
> > +++ cfe/trunk/include/clang/Sema/Ownership.h Sun Jan 20 13:19:56 2019
> > @@ -128,9 +128,6 @@ namespace llvm {
> >      }
> >    };
> >
> > -  template <class T>
> > -  struct isPodLike<clang::OpaquePtr<T>> { static const bool value =
> true; };
> > -
> >  } // namespace llvm
> >
> >  namespace clang {
> >
> > Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
> (original)
> > +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
> Sun Jan 20 13:19:56 2019
> > @@ -667,13 +667,4 @@ private:
> >
> >  } // namespace clang
> >
> > -namespace llvm {
> > -
> > -template <typename T> struct isPodLike;
> > -template <> struct isPodLike<clang::ento::SVal> {
> > -  static const bool value = true;
> > -};
> > -
> > -} // namespace llvm
> > -
> >  #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SVALS_H
> >
> > Modified: cfe/trunk/lib/AST/VTableBuilder.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/VTableBuilder.cpp?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/AST/VTableBuilder.cpp (original)
> > +++ cfe/trunk/lib/AST/VTableBuilder.cpp Sun Jan 20 13:19:56 2019
> > @@ -846,6 +846,8 @@ private:
> >        : BaseOffset(CharUnits::Zero()),
> >        BaseOffsetInLayoutClass(CharUnits::Zero()),
> >        VTableIndex(0) { }
> > +
> > +    MethodInfo(MethodInfo const&) = default;
> >    };
> >
> >    typedef llvm::DenseMap<const CXXMethodDecl *, MethodInfo>
> MethodInfoMapTy;
> >
> > Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> > +++ cfe/trunk/lib/Sema/SemaChecking.cpp Sun Jan 20 13:19:56 2019
> > @@ -11662,12 +11662,12 @@ class SequenceChecker : public Evaluated
> >      class Seq {
> >        friend class SequenceTree;
> >
> > -      unsigned Index = 0;
> > +      unsigned Index;
> >
> >        explicit Seq(unsigned N) : Index(N) {}
> >
> >      public:
> > -      Seq() = default;
> > +      Seq() : Index(0) {}
> >      };
> >
> >      SequenceTree() { Values.push_back(Value(0)); }
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Core/RegionStore.cpp Sun Jan 20
> 13:19:56 2019
> > @@ -130,10 +130,6 @@ namespace llvm {
> >      return os;
> >    }
> >
> > -  template <typename T> struct isPodLike;
> > -  template <> struct isPodLike<BindingKey> {
> > -    static const bool value = true;
> > -  };
> >  } // end llvm namespace
> >
> >  #ifndef NDEBUG
> >
> > Modified: cfe/trunk/test/Analysis/llvm-conventions.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/llvm-conventions.cpp?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/Analysis/llvm-conventions.cpp (original)
> > +++ cfe/trunk/test/Analysis/llvm-conventions.cpp Sun Jan 20 13:19:56 2019
> > @@ -152,8 +152,6 @@ inline bool operator>(StringRef LHS, Str
> >  inline bool operator>=(StringRef LHS, StringRef RHS);
> >  inline std::string &operator+=(std::string &buffer, StringRef string);
> >  hash_code hash_value(StringRef S);
> > -template <typename T> struct isPodLike;
> > -template <> struct isPodLike<StringRef> { static const bool value =
> true; };
> >
> >  } // end of namespace llvm
> >
> >
> > Modified: cfe/trunk/tools/libclang/Indexing.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=351701&r1=351700&r2=351701&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/libclang/Indexing.cpp (original)
> > +++ cfe/trunk/tools/libclang/Indexing.cpp Sun Jan 20 13:19:56 2019
> > @@ -93,9 +93,6 @@ typedef llvm::DenseSet<PPRegion> PPRegio
> >  } // end anonymous namespace
> >
> >  namespace llvm {
> > -  template <> struct isPodLike<PPRegion> {
> > -    static const bool value = true;
> > -  };
> >
> >    template <>
> >    struct DenseMapInfo<PPRegion> {
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> >
>
> --
> ROOT https://root.cern
> CERN EP-SFT, 1211 Geneva 23, Switzerland
> Phone: +41227678225
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190122/d4267625/attachment-0001.html>


More information about the cfe-commits mailing list