diff options
author | Chris Lattner <sabre@nondot.org> | 2010-05-10 00:25:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-05-10 00:25:06 +0000 |
commit | d2598368876cfe40bc8465540033bc5b5e58d8af (patch) | |
tree | c38b994ac556c0e89e7329b5f90ce224006ad2a5 /lib/Frontend/PCHWriterStmt.cpp | |
parent | 5ce667770652016e73dae991372effb5d6f6bb0f (diff) |
pchify CXXTemporary, CXXBindTemporaryExpr, and
CXXExprWithTemporaries.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103387 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriterStmt.cpp')
-rw-r--r-- | lib/Frontend/PCHWriterStmt.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/Frontend/PCHWriterStmt.cpp b/lib/Frontend/PCHWriterStmt.cpp index e64ebbe8a3..8c566d00fb 100644 --- a/lib/Frontend/PCHWriterStmt.cpp +++ b/lib/Frontend/PCHWriterStmt.cpp @@ -126,6 +126,9 @@ namespace { void VisitCXXThisExpr(CXXThisExpr *E); void VisitCXXThrowExpr(CXXThrowExpr *E); void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E); + void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E); + + void VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E); }; } @@ -954,6 +957,23 @@ void PCHStmtWriter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { Code = pch::EXPR_CXX_DEFAULT_ARG; } +void PCHStmtWriter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { + VisitExpr(E); + Writer.AddCXXTemporary(E->getTemporary(), Record); + Writer.WriteSubStmt(E->getSubExpr()); + Code = pch::EXPR_CXX_BIND_TEMPORARY; +} + +void PCHStmtWriter::VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) { + VisitExpr(E); + Record.push_back(E->getNumTemporaries()); + for (unsigned i = 0, e = E->getNumTemporaries(); i != e; ++i) + Writer.AddCXXTemporary(E->getTemporary(i), Record); + + Writer.WriteSubStmt(E->getSubExpr()); + Code = pch::EXPR_CXX_EXPR_WITH_TEMPORARIES; +} + //===----------------------------------------------------------------------===// // PCHWriter Implementation @@ -1021,8 +1041,12 @@ void PCHWriter::FlushStmts() { Writer.Code = pch::STMT_NULL_PTR; Writer.Visit(S); - assert(Writer.Code != pch::STMT_NULL_PTR && - "Unhandled expression writing PCH file"); +#ifndef NDEBUG + if (Writer.Code == pch::STMT_NULL_PTR) { + S->dump(); + assert(0 && "Unhandled expression writing PCH file"); + } +#endif Stream.EmitRecord(Writer.Code, Record); assert(N == StmtsToEmit.size() && |