]> granicus.if.org Git - clang/commit
The ability to use vector initializer lists is a GNU vector extension
authorJames Molloy <james.molloy@arm.com>
Fri, 20 Jun 2014 14:35:13 +0000 (14:35 +0000)
committerJames Molloy <james.molloy@arm.com>
Fri, 20 Jun 2014 14:35:13 +0000 (14:35 +0000)
commit8d4b65e9e44d0653255bbd66b3691bf54c4e4fac
tree538026d6ea618b29bfcbf484edc8cba181746a55
parent87670550a8967d6a8658a486a38713c6534c4f16
The ability to use vector initializer lists is a GNU vector extension
and is unrelated to the NEON intrinsics in arm_neon.h. On little
endian machines it works fine, however on big endian machines it
exhibits surprising behaviour:

    uint32x2_t x = {42, 64};
    return vget_lane_u32(x, 0); // Will return 64.

Because of this, explicitly call out that it is unsupported on big
endian machines.

This patch will emit the following warning in big-endian mode:

    test.c:3:15: warning: vector initializers are a GNU extension and are not compatible with NEON intrinsics [-Wgnu]
    int32x4_t x = {0, 1, 2, 3};
                  ^
    test.c:3:15: note: consider using vld1q_s32() to initialize a vector from memory, or vcombine_s32(vcreate_s32(), vcreate_s32()) to initialize from integer constants
    1 warning generated.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211362 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaInit.cpp
test/Sema/big-endian-neon-initializers.c [new file with mode: 0644]