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 /clang | |
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
Diffstat (limited to 'clang')
-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: |