<div dir="ltr">What are the compilation flags to trigger that failure?<div>It is unexpected that a target integer word is 8 and sizeof(size_t) is 4.</div><div>If that configuration is correct, and also needs emutls, then it cannot use both gnu's emutls.c and this one because the layout difference. If that platform does not need emutls or compatibility with gcc, then we can skip this test for that platform.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 4, 2015 at 8:00 AM, H.J. Lu <span dir="ltr"><<a href="mailto:hjl.tools@gmail.com" target="_blank">hjl.tools@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Aug 31, 2015 at 10:14 AM, Chih-Hung Hsieh via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: chh<br>
> Date: Mon Aug 31 12:14:07 2015<br>
> New Revision: 246454<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=246454&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=246454&view=rev</a><br>
> Log:<br>
> builtins: implement __emutls_get_address<br>
><br>
> For targets like Android that depends on libgcc's emulated thread local storage.<br>
> clang/llvm can generate calls to __emutls_get_address since<br>
> <a href="http://reviews.llvm.org/D10522" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10522</a> and <a href="http://reviews.llvm.org/D10524" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10524</a><br>
><br>
> Differential Revision: <a href="http://reviews.llvm.org/D12001" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12001</a><br>
><br>
><br>
> Added:<br>
>     compiler-rt/trunk/lib/builtins/emutls.c<br>
> Modified:<br>
>     compiler-rt/trunk/lib/builtins/CMakeLists.txt<br>
>     compiler-rt/trunk/lib/builtins/README.txt<br>
>     compiler-rt/trunk/lib/builtins/int_util.h<br>
><br>
><br>
> +/* Emulated TLS objects are always allocated at run-time. */<br>
> +static inline void* emutls_allocate_object(__emutls_control* control) {<br>
> +    /* Use standard C types, check with gcc's emutls.o. */<br>
> +    typedef unsigned int gcc_word __attribute__((mode(word)));<br>
> +    typedef unsigned int gcc_pointer __attribute__((mode(pointer)));<br>
> +    COMPILE_TIME_ASSERT(sizeof(size_t) == sizeof(gcc_word));<br>
<br>
What is this assert for?  It is false for x32 where size_t is 4 bytes and<br>
gcc_word 8 bytes.<br>
<br>
> +    COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(gcc_pointer));<br>
> +    COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(void*));<br>
><br>
<span class="HOEnZb"><font color="#888888">--<br>
H.J.<br>
</font></span></blockquote></div><br></div>