diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-04-14 20:33:36 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-04-14 20:33:36 +0000 |
commit | bc2ee9382c82d7119dbf11421f6c6a9728fd5e53 (patch) | |
tree | 065aebb618578963b87d3c8d3d635c8d17010ca3 /clang | |
parent | af670a81e9b74829a8a1381f7db9d6c646f32428 (diff) | |
download | bcm5719-llvm-bc2ee9382c82d7119dbf11421f6c6a9728fd5e53.tar.gz bcm5719-llvm-bc2ee9382c82d7119dbf11421f6c6a9728fd5e53.zip |
Match pointer of compatible vection types.
// rdar://9208404
llvm-svn: 129536
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaCXX/neon-vector-types.cpp | 27 |
2 files changed, 35 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index ac2ba1a9929..25e25a2139d 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1661,6 +1661,14 @@ bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType, return true; } + if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() && + Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) { + ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr, + ToPointeeType, + ToType, Context); + return true; + } + return false; } diff --git a/clang/test/SemaCXX/neon-vector-types.cpp b/clang/test/SemaCXX/neon-vector-types.cpp new file mode 100644 index 00000000000..aa82b11e8cd --- /dev/null +++ b/clang/test/SemaCXX/neon-vector-types.cpp @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// rdar://9208404 + +typedef int MP4Err; +typedef float Float32; +typedef float float32_t; +typedef __attribute__((neon_vector_type(4))) float32_t float32x4_t; +typedef float vFloat __attribute__((__vector_size__(16))); +typedef vFloat VFLOAT; +typedef unsigned long UInt32; + +extern int bar (float32x4_t const *p); + +int foo (const Float32 *realBufPtr) { + float32x4_t const *vRealPtr = (VFLOAT *)&realBufPtr[0]; + return bar(vRealPtr); +} + +MP4Err autoCorrelation2nd_Neon(Float32 *alphar, Float32 *alphai, + const Float32 *realBufPtr, + const Float32 *imagBufPtr, + const UInt32 len) +{ + float32x4_t const *vRealPtr = (VFLOAT *)&realBufPtr[0]; + return 0; +} + |