diff options
| author | John McCall <rjmccall@apple.com> | 2010-02-03 00:55:45 +0000 | 
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-02-03 00:55:45 +0000 | 
| commit | 2adddcae7ed197ec163d5bd52283ec457657cf86 (patch) | |
| tree | bd8440d01432d745de943d4b09b2b28d922f964b | |
| parent | dee74e2805bc9f7210aca7f65e47f0658432d39b (diff) | |
| download | bcm5719-llvm-2adddcae7ed197ec163d5bd52283ec457657cf86.tar.gz bcm5719-llvm-2adddcae7ed197ec163d5bd52283ec457657cf86.zip  | |
Remove abstract expression kinds from the StmtClass enum.  Update a few users
appropriately.  Call out a few missing cases in the expression mangler.
llvm-svn: 95176
| -rw-r--r-- | clang/include/clang/AST/Expr.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/AST/Stmt.h | 1 | ||||
| -rw-r--r-- | clang/include/clang/AST/StmtNodes.def | 8 | ||||
| -rw-r--r-- | clang/include/clang/AST/StmtVisitor.h | 1 | ||||
| -rw-r--r-- | clang/include/clang/Checker/PathSensitive/CheckerVisitor.def | 1 | ||||
| -rw-r--r-- | clang/include/clang/Checker/PathSensitive/CheckerVisitor.h | 11 | ||||
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/AST/Stmt.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 29 | ||||
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 16 | ||||
| -rw-r--r-- | clang/tools/CIndex/CXCursor.cpp | 3 | 
11 files changed, 39 insertions, 37 deletions
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index 7f3c5cde389..f192b6f1561 100644 --- a/clang/include/clang/AST/Expr.h +++ b/clang/include/clang/AST/Expr.h @@ -1748,7 +1748,7 @@ public:    static bool classof(const Stmt *T) {      StmtClass SC = T->getStmtClass(); -    if (SC >= ExplicitCastExprClass && SC <= CStyleCastExprClass) +    if (SC >= CStyleCastExprClass && SC <= CStyleCastExprClass)        return true;      if (SC >= CXXNamedCastExprClass && SC <= CXXFunctionalCastExprClass)        return true; diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h index d2001d97711..94caa6faad6 100644 --- a/clang/include/clang/AST/Stmt.h +++ b/clang/include/clang/AST/Stmt.h @@ -102,6 +102,7 @@ public:  #define LAST_STMT(CLASS) lastStmtConstant = CLASS##Class,  #define FIRST_EXPR(CLASS) firstExprConstant = CLASS##Class,  #define LAST_EXPR(CLASS) lastExprConstant = CLASS##Class +#define ABSTRACT_EXPR(CLASS, PARENT)  #include "clang/AST/StmtNodes.def"  };  private: diff --git a/clang/include/clang/AST/StmtNodes.def b/clang/include/clang/AST/StmtNodes.def index 301d6baf54d..ec6149e55f1 100644 --- a/clang/include/clang/AST/StmtNodes.def +++ b/clang/include/clang/AST/StmtNodes.def @@ -68,8 +68,7 @@ STMT(CXXTryStmt  , Stmt)  LAST_STMT(CXXTryStmt)  // Expressions. -ABSTRACT_EXPR(Expr                  , Stmt) -FIRST_EXPR(Expr) +ABSTRACT_EXPR(Expr         , Stmt)  EXPR(PredefinedExpr        , Expr)  EXPR(DeclRefExpr           , Expr)  EXPR(IntegerLiteral        , Expr) @@ -83,12 +82,12 @@ EXPR(SizeOfAlignOfExpr     , Expr)  EXPR(ArraySubscriptExpr    , Expr)  EXPR(CallExpr              , Expr)  EXPR(MemberExpr            , Expr) -EXPR(CastExpr              , Expr) +ABSTRACT_EXPR(CastExpr     , Expr)  EXPR(BinaryOperator        , Expr)  EXPR(CompoundAssignOperator, BinaryOperator)  EXPR(ConditionalOperator   , Expr)  EXPR(ImplicitCastExpr      , CastExpr) -EXPR(ExplicitCastExpr      , CastExpr) +ABSTRACT_EXPR(ExplicitCastExpr, CastExpr)  EXPR(CStyleCastExpr        , ExplicitCastExpr)  EXPR(CompoundLiteralExpr   , Expr)  EXPR(ExtVectorElementExpr  , Expr) @@ -153,6 +152,7 @@ EXPR(ShuffleVectorExpr    , Expr)  EXPR(BlockExpr            , Expr)  EXPR(BlockDeclRefExpr     , Expr) +FIRST_EXPR(PredefinedExpr)  LAST_EXPR(BlockDeclRefExpr)  #undef ABSTRACT_EXPR diff --git a/clang/include/clang/AST/StmtVisitor.h b/clang/include/clang/AST/StmtVisitor.h index 3a525507dad..4986f08ac12 100644 --- a/clang/include/clang/AST/StmtVisitor.h +++ b/clang/include/clang/AST/StmtVisitor.h @@ -105,6 +105,7 @@ public:      // Top switch stmt: dispatch to VisitFooStmt for each FooStmt.      switch (S->getStmtClass()) {      default: assert(0 && "Unknown stmt kind!"); +#define ABSTRACT_EXPR(CLASS, PARENT)  #define STMT(CLASS, PARENT)                              \      case Stmt::CLASS ## Class: DISPATCH(CLASS, CLASS);  #include "clang/AST/StmtNodes.def" diff --git a/clang/include/clang/Checker/PathSensitive/CheckerVisitor.def b/clang/include/clang/Checker/PathSensitive/CheckerVisitor.def index 7ec27efe519..2edc4a37b7e 100644 --- a/clang/include/clang/Checker/PathSensitive/CheckerVisitor.def +++ b/clang/include/clang/Checker/PathSensitive/CheckerVisitor.def @@ -22,7 +22,6 @@  PREVISIT(ArraySubscriptExpr, Stmt)  PREVISIT(BinaryOperator, Stmt)  PREVISIT(CallExpr, Stmt) -PREVISIT(CastExpr, Stmt)  PREVISIT(CXXOperatorCallExpr, CallExpr)  PREVISIT(DeclStmt, Stmt)  PREVISIT(ObjCMessageExpr, Stmt) diff --git a/clang/include/clang/Checker/PathSensitive/CheckerVisitor.h b/clang/include/clang/Checker/PathSensitive/CheckerVisitor.h index 913a6c75bcc..72f0ae1375e 100644 --- a/clang/include/clang/Checker/PathSensitive/CheckerVisitor.h +++ b/clang/include/clang/Checker/PathSensitive/CheckerVisitor.h @@ -42,7 +42,6 @@ public:          return;        case Stmt::ImplicitCastExprClass: -      case Stmt::ExplicitCastExprClass:        case Stmt::CStyleCastExprClass:          static_cast<ImplClass*>(this)->PreVisitCastExpr(C,                                                 static_cast<const CastExpr*>(S)); @@ -82,16 +81,18 @@ break;    void PreVisitStmt(CheckerContext &C, const Stmt *S) {}    void PostVisitStmt(CheckerContext &C, const Stmt *S) {} + +  void PreVisitCastExpr(CheckerContext &C, const CastExpr *E) { +    static_cast<ImplClass*>(this)->PreVisitStmt(C, E); +  }  #define PREVISIT(NAME, FALLBACK) \  void PreVisit ## NAME(CheckerContext &C, const NAME* S) {\ -  PreVisit ## FALLBACK(C, S);\ +  static_cast<ImplClass*>(this)->PreVisit ## FALLBACK(C, S);\  } -#include "clang/Checker/PathSensitive/CheckerVisitor.def" -        #define POSTVISIT(NAME, FALLBACK) \  void PostVisit ## NAME(CheckerContext &C, const NAME* S) {\ -  PostVisit ## FALLBACK(C, S);\ +  static_cast<ImplClass*>(this)->PostVisit ## FALLBACK(C, S);\  }  #include "clang/Checker/PathSensitive/CheckerVisitor.def"  }; diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index cf78c66a8d3..50ddc9156a9 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1616,7 +1616,6 @@ static ICEDiag CheckICE(const Expr* E, ASTContext &Ctx) {    case Expr::BlockExprClass:    case Expr::BlockDeclRefExprClass:    case Expr::NoStmtClass: -  case Expr::ExprClass:      return ICEDiag(2, E->getLocStart());    case Expr::GNUNullExprClass: @@ -1812,9 +1811,7 @@ static ICEDiag CheckICE(const Expr* E, ASTContext &Ctx) {      }      }    } -  case Expr::CastExprClass:    case Expr::ImplicitCastExprClass: -  case Expr::ExplicitCastExprClass:    case Expr::CStyleCastExprClass:    case Expr::CXXFunctionalCastExprClass:    case Expr::CXXNamedCastExprClass: diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp index ce97387ee36..a0830997dcd 100644 --- a/clang/lib/AST/Stmt.cpp +++ b/clang/lib/AST/Stmt.cpp @@ -35,6 +35,7 @@ static StmtClassNameTable &getStmtInfoTableEntry(Stmt::StmtClass E) {    // Intialize the table on the first use.    Initialized = true; +#define ABSTRACT_EXPR(CLASS, PARENT)  #define STMT(CLASS, PARENT) \    StmtClassInfo[(unsigned)Stmt::CLASS##Class].Name = #CLASS;    \    StmtClassInfo[(unsigned)Stmt::CLASS##Class].Size = sizeof(CLASS); diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 93b9a8fbc7e..4f84edd908b 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -1056,21 +1056,38 @@ void CXXNameMangler::mangleIntegerLiteral(QualType T,  void CXXNameMangler::mangleExpression(const Expr *E) {    // <expression> ::= <unary operator-name> <expression> -	//              ::= <binary operator-name> <expression> <expression> -	//              ::= <trinary operator-name> <expression> <expression> <expression> -  //              ::= cl <expression>* E	        # call +  //              ::= <binary operator-name> <expression> <expression> +  //              ::= <trinary operator-name> <expression> <expression> <expression> +  //              ::= cl <expression>* E	     # call    //              ::= cv <type> expression           # conversion with one argument    //              ::= cv <type> _ <expression>* E # conversion with a different number of arguments -  //              ::= st <type>		        # sizeof (a type) +  //              ::= st <type>		             # sizeof (a type)    //              ::= at <type>                      # alignof (a type)    //              ::= <template-param>    //              ::= <function-param>    //              ::= sr <type> <unqualified-name>                   # dependent name    //              ::= sr <type> <unqualified-name> <template-args>   # dependent template-id    //              ::= sZ <template-param>                            # size of a parameter pack -	//              ::= <expr-primary> +  //              ::= <expr-primary>    switch (E->getStmtClass()) { -  default: assert(false && "Unhandled expression kind!"); +  default: +    llvm_unreachable("unexpected statement kind"); +    break; + +  case Expr::CallExprClass: +    // FIXME: implement +    llvm_unreachable("mangling not implemented for calls"); +    break; + +  case Expr::CXXConstructExprClass: +    // FIXME: implement +    llvm_unreachable("mangling not implemented for construct exprs"); +    break;     + +  case Expr::SizeOfAlignOfExprClass: +    // FIXME: implement +    llvm_unreachable("mangling not implemented for sizeof/alignof"); +    break;    case Expr::UnaryOperatorClass: {      const UnaryOperator *UO = cast<UnaryOperator>(E); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index b23a69860b7..1938e3dfb59 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -1684,6 +1684,7 @@ Sema::OwningStmtResult TreeTransform<Derived>::TransformStmt(Stmt *S) {    // Transform expressions by calling TransformExpr.  #define STMT(Node, Parent) +#define ABSTRACT_EXPR(Node, Parent)  #define EXPR(Node, Parent) case Stmt::Node##Class:  #include "clang/AST/StmtNodes.def"      { @@ -1707,6 +1708,7 @@ Sema::OwningExprResult TreeTransform<Derived>::TransformExpr(Expr *E) {    switch (E->getStmtClass()) {      case Stmt::NoStmtClass: break;  #define STMT(Node, Parent) case Stmt::Node##Class: break; +#define ABSTRACT_EXPR(Node, Parent)  #define EXPR(Node, Parent)                                              \      case Stmt::Node##Class: return getDerived().Transform##Node(cast<Node>(E));  #include "clang/AST/StmtNodes.def" @@ -3829,13 +3831,6 @@ TreeTransform<Derived>::TransformMemberExpr(MemberExpr *E) {  template<typename Derived>  Sema::OwningExprResult -TreeTransform<Derived>::TransformCastExpr(CastExpr *E) { -  assert(false && "Cannot transform abstract class"); -  return SemaRef.Owned(E->Retain()); -} - -template<typename Derived> -Sema::OwningExprResult  TreeTransform<Derived>::TransformBinaryOperator(BinaryOperator *E) {    OwningExprResult LHS = getDerived().TransformExpr(E->getLHS());    if (LHS.isInvalid()) @@ -3899,13 +3894,6 @@ TreeTransform<Derived>::TransformImplicitCastExpr(ImplicitCastExpr *E) {  template<typename Derived>  Sema::OwningExprResult -TreeTransform<Derived>::TransformExplicitCastExpr(ExplicitCastExpr *E) { -  assert(false && "Cannot transform abstract class"); -  return SemaRef.Owned(E->Retain()); -} - -template<typename Derived> -Sema::OwningExprResult  TreeTransform<Derived>::TransformCStyleCastExpr(CStyleCastExpr *E) {    TypeSourceInfo *OldT;    TypeSourceInfo *NewT; diff --git a/clang/tools/CIndex/CXCursor.cpp b/clang/tools/CIndex/CXCursor.cpp index 03b050db313..ec1477eb8a2 100644 --- a/clang/tools/CIndex/CXCursor.cpp +++ b/clang/tools/CIndex/CXCursor.cpp @@ -115,7 +115,6 @@ CXCursor cxcursor::MakeCXCursor(Stmt *S, Decl *Parent, ASTUnit *TU) {      K = CXCursor_UnexposedStmt;      break; -  case Stmt::ExprClass:    case Stmt::PredefinedExprClass:            case Stmt::IntegerLiteralClass:            case Stmt::FloatingLiteralClass:        @@ -126,12 +125,10 @@ CXCursor cxcursor::MakeCXCursor(Stmt *S, Decl *Parent, ASTUnit *TU) {    case Stmt::UnaryOperatorClass:             case Stmt::SizeOfAlignOfExprClass:         case Stmt::ArraySubscriptExprClass:     -  case Stmt::CastExprClass:                  case Stmt::BinaryOperatorClass:            case Stmt::CompoundAssignOperatorClass:    case Stmt::ConditionalOperatorClass:       case Stmt::ImplicitCastExprClass: -  case Stmt::ExplicitCastExprClass:    case Stmt::CStyleCastExprClass:    case Stmt::CompoundLiteralExprClass:       case Stmt::ExtVectorElementExprClass:    | 

