https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120799

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|sanitizer                   |target
             Target|                            |x86_64-*-*

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
The implementation suggests it is not OK:

extern __inline void __attribute__((__gnu_inline__, __always_inline__,
__artificial__))
_mm_storel_pd (double *__P, __m128d __A)
{
  *__P = ((__v2df)__A)[0];
}

Note the x86 architecture itself is fine with misaligned scalar accesses but
the C standard says the above invokes UB.  In case the intrinsics explicitly or
implicitly say otherwise the intrinsic implementation has to be adjusted
to receive an unaligned 'double' destination pointer.  In case the
official intrisic documentation has the above prototype then passing
an unaligned pointer is UB (the act of converting that to double * is already).

Reply via email to