[cfe-dev] Alignment assumptions
Stephen Canon via cfe-dev
cfe-dev at lists.llvm.org
Thu Dec 14 07:38:27 PST 2017
Intel documents these types as follows:
"The compiler aligns the __m256, __m256d, and __m256i local and global data to 32-byte boundaries on the stack"
That’s awkwardly worded, but these types have 32B alignment; the result of casting a pointer that is not suitably aligned is undefined (i.e this is a bug in your code).
– Steve
> On Dec 14, 2017, at 7:30 AM, Marcel Keller via cfe-dev <cfe-dev at lists.llvm.org> wrote:
>
> Hi,
>
> The attached code segfaults with clang 3.8 and 4.0:
>
> $ clang++ -g -O3 -mavx main.cpp A.cpp ; ./a.out
> Segmentation fault
>
> The problem is in the following line:
>
> memset((__m256i*)dest, 0, length);
>
> Removing the cast to __m256i* solves the problem. It seems that clang assumes that __m256i* is always aligned correctly, which is not the case in the code. Is that a bug in clang, or is that a mistake on my side? GCC does not cause a segfault.
>
> Best regards,
> Marcel
> <A.h><main.cpp><A.cpp>_______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171214/485c8792/attachment.html>
More information about the cfe-dev
mailing list