diff options
| author | Egor Churaev <egor.churaev@gmail.com> | 2017-03-29 05:40:45 +0000 | 
|---|---|---|
| committer | Egor Churaev <egor.churaev@gmail.com> | 2017-03-29 05:40:45 +0000 | 
| commit | 0676fb5ae65584389f7340d30d1c13148d778b6c (patch) | |
| tree | 9b8583d4dca58e1b80997bab5404aa0cf8c4809a | |
| parent | cf791cf38935b711083547eb2d252fef788006ae (diff) | |
| download | bcm5719-llvm-0676fb5ae65584389f7340d30d1c13148d778b6c.tar.gz bcm5719-llvm-0676fb5ae65584389f7340d30d1c13148d778b6c.zip | |
Reverted r298976 [OpenCL] Added parsing for OpenCL vector types.
llvm-svn: 298978
| -rw-r--r-- | clang/include/clang/Parse/Parser.h | 6 | ||||
| -rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 59 | ||||
| -rw-r--r-- | clang/test/Parser/vector-cast-define.cl | 10 | 
3 files changed, 6 insertions, 69 deletions
| diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index ff099cce179..e1d395c85f6 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/include/clang/Parse/Parser.h @@ -1449,12 +1449,10 @@ private:    ExprResult ParseCastExpression(bool isUnaryExpression,                                   bool isAddressOfOperand,                                   bool &NotCastExpr, -                                 TypeCastState isTypeCast, -                                 bool isVectorLiteral = false); +                                 TypeCastState isTypeCast);    ExprResult ParseCastExpression(bool isUnaryExpression,                                   bool isAddressOfOperand = false, -                                 TypeCastState isTypeCast = NotTypeCast, -                                 bool isVectorLiteral = false); +                                 TypeCastState isTypeCast = NotTypeCast);    /// Returns true if the next token cannot start an expression.    bool isNotExpressionStart(); diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index e1439d63780..4dcdfbf993e 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -473,14 +473,12 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {  ///  ExprResult Parser::ParseCastExpression(bool isUnaryExpression,                                         bool isAddressOfOperand, -                                       TypeCastState isTypeCast, -                                       bool isVectorLiteral) { +                                       TypeCastState isTypeCast) {    bool NotCastExpr;    ExprResult Res = ParseCastExpression(isUnaryExpression,                                         isAddressOfOperand,                                         NotCastExpr, -                                       isTypeCast, -                                       isVectorLiteral); +                                       isTypeCast);    if (NotCastExpr)      Diag(Tok, diag::err_expected_expression);    return Res; @@ -696,8 +694,7 @@ class CastExpressionIdValidator : public CorrectionCandidateCallback {  ExprResult Parser::ParseCastExpression(bool isUnaryExpression,                                         bool isAddressOfOperand,                                         bool &NotCastExpr, -                                       TypeCastState isTypeCast, -                                       bool isVectorLiteral) { +                                       TypeCastState isTypeCast) {    ExprResult Res;    tok::TokenKind SavedKind = Tok.getKind();    NotCastExpr = false; @@ -725,9 +722,6 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,      Res = ParseParenExpression(ParenExprType, false/*stopIfCastExr*/,                                 isTypeCast == IsTypeCast, CastTy, RParenLoc); -    if (isVectorLiteral) -        return Res; -      switch (ParenExprType) {      case SimpleExpr:   break;    // Nothing else to do.      case CompoundStmt: break;  // Nothing else to do. @@ -2356,48 +2350,6 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,          return ParseCompoundLiteralExpression(Ty.get(), OpenLoc, RParenLoc);        } -      if (Tok.is(tok::l_paren)) { -        // This could be OpenCL vector Literals -        if (getLangOpts().OpenCL) -        { -          TypeResult Ty; -          { -            InMessageExpressionRAIIObject InMessage(*this, false); -            Ty = Actions.ActOnTypeName(getCurScope(), DeclaratorInfo); -          } -          if(Ty.isInvalid()) -          { -             return ExprError(); -          } -          QualType QT = Ty.get().get().getCanonicalType(); -          if (QT->isVectorType()) -          { -            // We parsed '(' vector-type-name ')' followed by '(' - -            // Parse the cast-expression that follows it next. -            // isVectorLiteral = true will make sure we don't parse any -            // Postfix expression yet -            Result = ParseCastExpression(/*isUnaryExpression=*/false, -                                         /*isAddressOfOperand=*/false, -                                         /*isTypeCast=*/IsTypeCast, -                                         /*isVectorLiteral=*/true); - -            if (!Result.isInvalid()) { -              Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc, -                                             DeclaratorInfo, CastTy, -                                             RParenLoc, Result.get()); -            } - -            // After we performed the cast we can check for postfix-expr pieces. -            if (!Result.isInvalid()) { -              Result = ParsePostfixExpressionSuffix(Result); -            } - -            return Result; -          } -        } -      } -        if (ExprType == CastExpr) {          // We parsed '(' type-name ')' and the thing after it wasn't a '{'. @@ -2427,13 +2379,10 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,          }          // Parse the cast-expression that follows it next. -        // isVectorLiteral = true will make sure we don't parse any -        // Postfix expression yet          // TODO: For cast expression with CastTy.          Result = ParseCastExpression(/*isUnaryExpression=*/false,                                       /*isAddressOfOperand=*/false, -                                     /*isTypeCast=*/IsTypeCast, -                                     /*isVectorLiteral=*/true); +                                     /*isTypeCast=*/IsTypeCast);          if (!Result.isInvalid()) {            Result = Actions.ActOnCastExpr(getCurScope(), OpenLoc,                                           DeclaratorInfo, CastTy,  diff --git a/clang/test/Parser/vector-cast-define.cl b/clang/test/Parser/vector-cast-define.cl deleted file mode 100644 index ec4eba7a784..00000000000 --- a/clang/test/Parser/vector-cast-define.cl +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -// expected-no-diagnostics - -typedef int int3 __attribute__((ext_vector_type(3))); - -void test() -{ -    int index = (int3)(1, 2, 3).x * (int3)(3, 2, 1).y; -} - | 

