diff options
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 3 | ||||
| -rw-r--r-- | clang/test/SemaOpenCL/vector_inc_dec_ops.cl | 19 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 5339c23c03d..da834cc2519 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -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(); diff --git a/clang/test/SemaOpenCL/vector_inc_dec_ops.cl b/clang/test/SemaOpenCL/vector_inc_dec_ops.cl new file mode 100644 index 00000000000..c65bbcb5b74 --- /dev/null +++ b/clang/test/SemaOpenCL/vector_inc_dec_ops.cl @@ -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++; +} |

