diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGen/struct-init.c | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 589e971ccb8..3aeb5188270 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -697,7 +697,8 @@ void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, // initial value of the object, including unnamed members, is // that of the expression. if ((ElemType->isRecordType() || ElemType->isVectorType()) && - SemaRef.Context.hasSameUnqualifiedType(expr->getType(), ElemType)) { + SemaRef.CheckSingleAssignmentConstraints(ElemType, expr) + == Sema::Compatible) { SemaRef.DefaultFunctionArrayLvalueConversion(expr); UpdateStructuredListElement(StructuredList, StructuredIndex, expr); ++Index; diff --git a/clang/test/CodeGen/struct-init.c b/clang/test/CodeGen/struct-init.c index 926e5a7f5dd..861c41e59cc 100644 --- a/clang/test/CodeGen/struct-init.c +++ b/clang/test/CodeGen/struct-init.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -emit-llvm -o - +// RUN: %clang_cc1 %s -emit-llvm-only typedef struct _zend_ini_entry zend_ini_entry; struct _zend_ini_entry { @@ -18,3 +18,14 @@ struct GLGENH { }; struct GLGENH ABHFBF = {1}; + +typedef __attribute__(( ext_vector_type(2) )) unsigned int uint2; +typedef __attribute__(( __vector_size__(8) )) unsigned int __neon_uint32x2_t; + +// rdar://8183908 +typedef struct __simd64_uint32_t { + __neon_uint32x2_t val; +} uint32x2_t; +void foo() { + const uint32x2_t signBit = { (uint2) 0x80000000 }; +} |