[llvm] r320737 - Fix isPodLike for MSVC and use it in TypeHashing.
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 14 12:01:39 PST 2017
I reverted the static_assert and went back to the MSVC only check for now.
I believe the static_assert holds, but isPodLike can't be correctly
implemented everywhere so it's failing.
On Thu, Dec 14, 2017 at 11:59 AM Hans Wennborg <hans at chromium.org> wrote:
> The static_assert doesn't hold in Chromium's Linux build:
>
>
> https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.clang%2FToTLinuxThinLTO%2F933%2F%2B%2Frecipes%2Fsteps%2Fgclient_runhooks%2F0%2Fstdout
>
> Looks like some LLVM bots are sad too, e.g.
>
> http://lab.llvm.org:8011/builders/clang-atom-d525-fedora-rel/builds/12386/steps/build%20stage%201/logs/stdio
>
> On Thu, Dec 14, 2017 at 11:41 AM, Zachary Turner via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> > Author: zturner
> > Date: Thu Dec 14 11:41:28 2017
> > New Revision: 320737
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=320737&view=rev
> > Log:
> > Fix isPodLike for MSVC and use it in TypeHashing.
> >
> > This should be a better check than using is_trivially_copyable
> > behind an #ifdef _MSC_VER.
> >
> > Modified:
> > llvm/trunk/include/llvm/DebugInfo/CodeView/TypeHashing.h
> > llvm/trunk/include/llvm/Support/type_traits.h
> >
> > Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeHashing.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeHashing.h?rev=320737&r1=320736&r2=320737&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeHashing.h (original)
> > +++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeHashing.h Thu Dec 14
> 11:41:28 2017
> > @@ -132,15 +132,10 @@ struct GloballyHashedType {
> > return Hashes;
> > }
> > };
> > -#if defined(_MSC_VER)
> > -// is_trivially_copyable is not available in older versions of libc++,
> but it is
> > -// available in all supported versions of MSVC, so at least this gives
> us some
> > -// coverage.
> > -static_assert(std::is_trivially_copyable<GloballyHashedType>::value,
> > +static_assert(isPodLike<GloballyHashedType>::value,
> > "GloballyHashedType must be trivially copyable so that we
> can "
> > "reinterpret_cast arrays of hash data to arrays of "
> > "GloballyHashedType");
> > -#endif
> > } // namespace codeview
> >
> > template <> struct DenseMapInfo<codeview::LocallyHashedType> {
> >
> > 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=320737&r1=320736&r2=320737&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/Support/type_traits.h (original)
> > +++ llvm/trunk/include/llvm/Support/type_traits.h Thu Dec 14 11:41:28
> 2017
> > @@ -30,9 +30,9 @@ namespace llvm {
> > template <typename T>
> > struct isPodLike {
> > // std::is_trivially_copyable is available in libc++ with clang,
> libstdc++
> > - // that comes with GCC 5.
> > + // that comes with GCC 5, and MSVC.
> > #if (__has_feature(is_trivially_copyable) && defined(_LIBCPP_VERSION))
> || \
> > - (defined(__GNUC__) && __GNUC__ >= 5)
> > + (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;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171214/1c5fbd0b/attachment.html>
More information about the llvm-commits
mailing list