OpenCL allows the (pre/post)-(increment/decrement) operator on integer vector types,

so allow that case and add appropriate tests.

Patch by Ruiling Song!



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190129 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Tweed 2013-09-06 09:58:08 +00:00
parent 2f0a020d29
commit d7d94dc922
2 changed files with 22 additions and 0 deletions

View File

@ -8413,6 +8413,9 @@ static QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op,
IsInc, IsPrefix);
} else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {
// OK! ( C/C++ Language Extensions for CBEA(Version 2.6) 10.3 )
} else if(S.getLangOpts().OpenCL && ResType->isVectorType() &&
ResType->getAs<VectorType>()->getElementType()->isIntegerType()) {
// OpenCL V1.2 6.3 says dec/inc ops operate on integer vector types.
} else {
S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement)
<< ResType << int(IsInc) << Op->getSourceRange();

View File

@ -0,0 +1,19 @@
// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
// expected-no-diagnostics
typedef __attribute__((ext_vector_type(2))) char char2;
typedef __attribute__((ext_vector_type(4))) unsigned int uint4;
typedef __attribute__((ext_vector_type(8))) long long8;
void vectorIncrementDecrementOps()
{
char2 A = (char2)(1);
uint4 B = (uint4)(1);
long8 C = (long8)(1);
A++;
--A;
B--;
++B;
C++;
}