<div dir="ltr">Yeah, sorry, Takumi's email about the linux failure fell out of my inbox somehow and I didn't take action on it.<div><br></div><div>i686-linux seems to have this problem:</div><div><br></div><div><div><div>struct Double { double d; };</div><div>static_assert(alignof(double) == 8, "");</div><div>static_assert(alignof(Double) == 4, "");</div></div></div><div><br></div><div>Both asserts pass and that is... a little insane. Both should report 4, unless -malign-double is enabled. I recall this was something we had to do for GCC compatibility, which reports the preferred alignment for alignof(double) instead of the required alignment.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 12, 2017 at 5:24 PM, NAKAMURA Takumi <span dir="ltr"><<a href="mailto:geek4civic@gmail.com" target="_blank">geek4civic@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Reverted in r291875.<div><br></div><div>Hans, I supposed you would make the branch later. Would it be too late?</div></div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Fri, Jan 13, 2017 at 3:53 AM Hans Wennborg <<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Takumi's buildbot started failing tests around this revision:<br class="m_-3166082181515565586gmail_msg">
<a href="http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/33628/steps/test_all/logs/LLVM-Unit%20%3A%3A%20Support__SupportTests__AlignOfTest.BasicAlignedArray" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">http://bb.pgr.jp/builders/<wbr>ninja-x64-msvc-RA-centos6/<wbr>builds/33628/steps/test_all/<wbr>logs/LLVM-Unit%20%3A%3A%<wbr>20Support__SupportTests__<wbr>AlignOfTest.BasicAlignedArray</a><br class="m_-3166082181515565586gmail_msg">
<br class="m_-3166082181515565586gmail_msg">
Reid, I saw you landed some fixes after this as well.<br class="m_-3166082181515565586gmail_msg">
<br class="m_-3166082181515565586gmail_msg">
I'm about create the branch for 4.0.0 later today. Please let me know<br class="m_-3166082181515565586gmail_msg">
if something needs to be fixed here and merged to the branch.<br class="m_-3166082181515565586gmail_msg">
<br class="m_-3166082181515565586gmail_msg">
Thanks,<br class="m_-3166082181515565586gmail_msg">
Hans<br class="m_-3166082181515565586gmail_msg">
<br class="m_-3166082181515565586gmail_msg">
<br class="m_-3166082181515565586gmail_msg">
On Mon, Jan 9, 2017 at 3:23 PM, Sean Callanan via llvm-commits<br class="m_-3166082181515565586gmail_msg">
<<a href="mailto:llvm-commits@lists.llvm.org" class="m_-3166082181515565586gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="m_-3166082181515565586gmail_msg">
> Author: spyffe<br class="m_-3166082181515565586gmail_msg">
> Date: Mon Jan  9 17:23:25 2017<br class="m_-3166082181515565586gmail_msg">
> New Revision: 291503<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=291503&view=rev" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=291503&view=rev</a><br class="m_-3166082181515565586gmail_msg">
> Log:<br class="m_-3166082181515565586gmail_msg">
> Lift the 10-type limit for AlignedCharArrayUnion<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> This patch uses C++11 parameter packs and constexpr functions<br class="m_-3166082181515565586gmail_msg">
> to allow AlignedCharArrayUnion to hold an arbitrary number of<br class="m_-3166082181515565586gmail_msg">
> types.<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> Differential Revision: <a href="https://reviews.llvm.org/D28429" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D28429</a><br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> Modified:<br class="m_-3166082181515565586gmail_msg">
>     llvm/trunk/include/llvm/<wbr>Support/AlignOf.h<br class="m_-3166082181515565586gmail_msg">
>     llvm/trunk/unittests/Support/<wbr>AlignOfTest.cpp<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> Modified: llvm/trunk/include/llvm/<wbr>Support/AlignOf.h<br class="m_-3166082181515565586gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AlignOf.h?rev=291503&r1=291502&r2=291503&view=diff" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Support/AlignOf.h?rev=<wbr>291503&r1=291502&r2=291503&<wbr>view=diff</a><br class="m_-3166082181515565586gmail_msg">
> ==============================<wbr>==============================<wbr>==================<br class="m_-3166082181515565586gmail_msg">
> --- llvm/trunk/include/llvm/<wbr>Support/AlignOf.h (original)<br class="m_-3166082181515565586gmail_msg">
> +++ llvm/trunk/include/llvm/<wbr>Support/AlignOf.h Mon Jan  9 17:23:25 2017<br class="m_-3166082181515565586gmail_msg">
> @@ -102,45 +102,38 @@ LLVM_ALIGNEDCHARARRAY_<wbr>TEMPLATE_ALIGNMENT<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
>  #endif // _MSC_VER<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> +// This code implements the equivalent of std::aligned_union from C++11.<br class="m_-3166082181515565586gmail_msg">
> +// That is supported by Visual Studio 2015 and GCC 5.1.<br class="m_-3166082181515565586gmail_msg">
> +// Once these are the baselines for LLVM, we can use std::aligned_union instead.<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
>  namespace detail {<br class="m_-3166082181515565586gmail_msg">
> -template <typename T1,<br class="m_-3166082181515565586gmail_msg">
> -          typename T2 = char, typename T3 = char, typename T4 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T5 = char, typename T6 = char, typename T7 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T8 = char, typename T9 = char, typename T10 = char><br class="m_-3166082181515565586gmail_msg">
> -class AlignerImpl {<br class="m_-3166082181515565586gmail_msg">
> -  T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; T8 t8; T9 t9; T10 t10;<br class="m_-3166082181515565586gmail_msg">
> +template <typename... Ts> class AlignerImpl;<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> +template <typename T1, typename... Ts><br class="m_-3166082181515565586gmail_msg">
> +class AlignerImpl<T1, Ts...> : AlignerImpl<Ts...> {<br class="m_-3166082181515565586gmail_msg">
> +  T1 t;<br class="m_-3166082181515565586gmail_msg">
>    AlignerImpl() = delete;<br class="m_-3166082181515565586gmail_msg">
>  };<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> -template <typename T1,<br class="m_-3166082181515565586gmail_msg">
> -          typename T2 = char, typename T3 = char, typename T4 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T5 = char, typename T6 = char, typename T7 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T8 = char, typename T9 = char, typename T10 = char><br class="m_-3166082181515565586gmail_msg">
> -union SizerImpl {<br class="m_-3166082181515565586gmail_msg">
> -  char arr1[sizeof(T1)], arr2[sizeof(T2)], arr3[sizeof(T3)], arr4[sizeof(T4)],<br class="m_-3166082181515565586gmail_msg">
> -       arr5[sizeof(T5)], arr6[sizeof(T6)], arr7[sizeof(T7)], arr8[sizeof(T8)],<br class="m_-3166082181515565586gmail_msg">
> -       arr9[sizeof(T9)], arr10[sizeof(T10)];<br class="m_-3166082181515565586gmail_msg">
> -};<br class="m_-3166082181515565586gmail_msg">
> +template <> class AlignerImpl<> { AlignerImpl() = delete; };<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
> +template <typename T1> constexpr size_t sizer() { return sizeof(T1); }<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
> +template <typename T1, typename T2, typename... Ts> constexpr size_t sizer() {<br class="m_-3166082181515565586gmail_msg">
> +  return (sizeof(T1) > sizer<T2, Ts...>()) ? sizeof(T1) : sizer<T2, Ts...>();<br class="m_-3166082181515565586gmail_msg">
> +}<br class="m_-3166082181515565586gmail_msg">
>  } // end namespace detail<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
>  /// \brief This union template exposes a suitably aligned and sized character<br class="m_-3166082181515565586gmail_msg">
> -/// array member which can hold elements of any of up to ten types.<br class="m_-3166082181515565586gmail_msg">
> +/// array member which can hold elements of any of a number of types.<br class="m_-3166082181515565586gmail_msg">
>  ///<br class="m_-3166082181515565586gmail_msg">
>  /// These types may be arrays, structs, or any other types. The goal is to<br class="m_-3166082181515565586gmail_msg">
>  /// expose a char array buffer member which can be used as suitable storage for<br class="m_-3166082181515565586gmail_msg">
> -/// a placement new of any of these types. Support for more than ten types can<br class="m_-3166082181515565586gmail_msg">
> -/// be added at the cost of more boilerplate.<br class="m_-3166082181515565586gmail_msg">
> -template <typename T1,<br class="m_-3166082181515565586gmail_msg">
> -          typename T2 = char, typename T3 = char, typename T4 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T5 = char, typename T6 = char, typename T7 = char,<br class="m_-3166082181515565586gmail_msg">
> -          typename T8 = char, typename T9 = char, typename T10 = char><br class="m_-3166082181515565586gmail_msg">
> -struct AlignedCharArrayUnion : llvm::AlignedCharArray<<br class="m_-3166082181515565586gmail_msg">
> -    alignof(llvm::detail::<wbr>AlignerImpl<T1, T2, T3, T4, T5,<br class="m_-3166082181515565586gmail_msg">
> -                                      T6, T7, T8, T9, T10>),<br class="m_-3166082181515565586gmail_msg">
> -    sizeof(::llvm::detail::<wbr>SizerImpl<T1, T2, T3, T4, T5,<br class="m_-3166082181515565586gmail_msg">
> -                                     T6, T7, T8, T9, T10>)> {<br class="m_-3166082181515565586gmail_msg">
> -};<br class="m_-3166082181515565586gmail_msg">
> +/// a placement new of any of these types.<br class="m_-3166082181515565586gmail_msg">
> +template <typename... Ts><br class="m_-3166082181515565586gmail_msg">
> +struct AlignedCharArrayUnion<br class="m_-3166082181515565586gmail_msg">
> +    : llvm::AlignedCharArray<<wbr>alignof(llvm::detail::<wbr>AlignerImpl<Ts...>),<br class="m_-3166082181515565586gmail_msg">
> +                             detail::sizer<Ts...>()> {};<br class="m_-3166082181515565586gmail_msg">
>  } // end namespace llvm<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
>  #endif // LLVM_SUPPORT_ALIGNOF_H<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> Modified: llvm/trunk/unittests/Support/<wbr>AlignOfTest.cpp<br class="m_-3166082181515565586gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/AlignOfTest.cpp?rev=291503&r1=291502&r2=291503&view=diff" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/unittests/<wbr>Support/AlignOfTest.cpp?rev=<wbr>291503&r1=291502&r2=291503&<wbr>view=diff</a><br class="m_-3166082181515565586gmail_msg">
> ==============================<wbr>==============================<wbr>==================<br class="m_-3166082181515565586gmail_msg">
> --- llvm/trunk/unittests/Support/<wbr>AlignOfTest.cpp (original)<br class="m_-3166082181515565586gmail_msg">
> +++ llvm/trunk/unittests/Support/<wbr>AlignOfTest.cpp Mon Jan  9 17:23:25 2017<br class="m_-3166082181515565586gmail_msg">
> @@ -91,6 +91,24 @@ V8::~V8() {}<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
>  template <typename M> struct T { M m; };<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> +typedef uint8_t t1;<br class="m_-3166082181515565586gmail_msg">
> +typedef uint16_t t2;<br class="m_-3166082181515565586gmail_msg">
> +typedef uint32_t t3;<br class="m_-3166082181515565586gmail_msg">
> +typedef uint64_t t4;<br class="m_-3166082181515565586gmail_msg">
> +typedef int8_t t5;<br class="m_-3166082181515565586gmail_msg">
> +typedef int16_t t6;<br class="m_-3166082181515565586gmail_msg">
> +typedef int32_t t7;<br class="m_-3166082181515565586gmail_msg">
> +typedef int64_t t8;<br class="m_-3166082181515565586gmail_msg">
> +typedef struct { uint8_t bytes[16]; } t9;<br class="m_-3166082181515565586gmail_msg">
> +typedef struct { uint16_t words[16]; } t10;<br class="m_-3166082181515565586gmail_msg">
> +typedef struct { uint32_t words[16]; } t11;<br class="m_-3166082181515565586gmail_msg">
> +typedef struct { uint64_t words[16]; } t12;<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
> +typedef AlignedCharArrayUnion<t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12> U;<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
> +static_assert(sizeof(U) == sizeof(uint64_t[16]), "Statically-computed size must be right");<br class="m_-3166082181515565586gmail_msg">
> +static_assert(alignof(U) == alignof(uint64_t), "Statically-computed alignment must be right");<br class="m_-3166082181515565586gmail_msg">
> +<br class="m_-3166082181515565586gmail_msg">
>  TEST(AlignOfTest, BasicAlignedArray) {<br class="m_-3166082181515565586gmail_msg">
>    EXPECT_LE(1u, alignof(AlignedCharArrayUnion<<wbr>A1>));<br class="m_-3166082181515565586gmail_msg">
>    EXPECT_LE(2u, alignof(AlignedCharArrayUnion<<wbr>A2>));<br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
><br class="m_-3166082181515565586gmail_msg">
> ______________________________<wbr>_________________<br class="m_-3166082181515565586gmail_msg">
> llvm-commits mailing list<br class="m_-3166082181515565586gmail_msg">
> <a href="mailto:llvm-commits@lists.llvm.org" class="m_-3166082181515565586gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="m_-3166082181515565586gmail_msg">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="m_-3166082181515565586gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br class="m_-3166082181515565586gmail_msg">
</blockquote></div>
</div></div></blockquote></div><br></div>