]> granicus.if.org Git - clang/commitdiff
Fix an issue with opencl init list checking.
authorNate Begeman <natebegeman@mac.com>
Wed, 7 Jul 2010 22:26:56 +0000 (22:26 +0000)
committerNate Begeman <natebegeman@mac.com>
Wed, 7 Jul 2010 22:26:56 +0000 (22:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107824 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaInit.cpp
test/Sema/opencl-init.c [new file with mode: 0644]

index 3d954618c209310864d267b0ce9b6b2afe8bb175..536222c37f011ac3d6fda270af58412abefa4698 100644 (file)
@@ -877,10 +877,15 @@ void InitListChecker::CheckVectorType(const InitializedEntity &Entity,
                               StructuredList, StructuredIndex);
           ++numEltsInit;
         } else {
+          QualType VecType;
           const VectorType *IVT = IType->getAs<VectorType>();
           unsigned numIElts = IVT->getNumElements();
-          QualType VecType = SemaRef.Context.getExtVectorType(elementType,
-                                                              numIElts);
+          
+          if (IType->isExtVectorType())
+            VecType = SemaRef.Context.getExtVectorType(elementType, numIElts);
+          else
+            VecType = SemaRef.Context.getVectorType(elementType, numIElts,
+                                                    IVT->getAltiVecSpecific());
           CheckSubElementType(ElementEntity, IList, VecType, Index,
                               StructuredList, StructuredIndex);
           numEltsInit += numIElts;
diff --git a/test/Sema/opencl-init.c b/test/Sema/opencl-init.c
new file mode 100644 (file)
index 0000000..3d116bd
--- /dev/null
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 %s -x cl -verify -pedantic -fsyntax-only
+
+typedef float float8 __attribute((ext_vector_type(8)));
+
+typedef float float32_t;
+typedef __attribute__(( __vector_size__(16) )) float32_t __neon_float32x4_t;
+typedef struct __simd128_float32_t {
+  __neon_float32x4_t val;
+} float32x4_t;
+
+float8 foo(float8 x) { 
+  float32x4_t lo;
+  float32x4_t hi;
+  return (float8) (lo.val, hi.val);
+}