From: David Tweed Date: Fri, 6 Sep 2013 09:58:08 +0000 (+0000) Subject: OpenCL allows the (pre/post)-(increment/decrement) operator on integer vector types, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7d94dc922075d131d51a4974f60c840e0e96cfb;p=clang 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 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 5339c23c03..da834cc251 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/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()->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/test/SemaOpenCL/vector_inc_dec_ops.cl b/test/SemaOpenCL/vector_inc_dec_ops.cl new file mode 100644 index 0000000000..c65bbcb5b7 --- /dev/null +++ b/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++; +}