diff options
author | Chris Lattner <sabre@nondot.org> | 2010-05-10 01:22:27 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-05-10 01:22:27 +0000 |
commit | 5921863d8f24084797863b5df37842113bac4352 (patch) | |
tree | 99e795337ccbfeb966464e5109b4e297c2eae6d7 /lib/Frontend/PCHWriterStmt.cpp | |
parent | ddfe960d252a93525692b547945236d361d1929f (diff) |
pch'ify CXXNewExpr and CXXZeroInitValueExpr
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103390 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriterStmt.cpp')
-rw-r--r-- | lib/Frontend/PCHWriterStmt.cpp | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/lib/Frontend/PCHWriterStmt.cpp b/lib/Frontend/PCHWriterStmt.cpp index 8c566d00fb..9a361d499c 100644 --- a/lib/Frontend/PCHWriterStmt.cpp +++ b/lib/Frontend/PCHWriterStmt.cpp @@ -128,6 +128,9 @@ namespace { void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E); void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E); + void VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E); + void VisitCXXNewExpr(CXXNewExpr *E); + void VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E); }; } @@ -964,6 +967,34 @@ void PCHStmtWriter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { Code = pch::EXPR_CXX_BIND_TEMPORARY; } +void PCHStmtWriter::VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) { + VisitExpr(E); + Writer.AddSourceLocation(E->getTypeBeginLoc(), Record); + Writer.AddSourceLocation(E->getRParenLoc(), Record); + Code = pch::EXPR_CXX_ZERO_INIT_VALUE; +} + +void PCHStmtWriter::VisitCXXNewExpr(CXXNewExpr *E) { + VisitExpr(E); + Record.push_back(E->isGlobalNew()); + Record.push_back(E->isParenTypeId()); + Record.push_back(E->hasInitializer()); + Record.push_back(E->isArray()); + Record.push_back(E->getNumPlacementArgs()); + Record.push_back(E->getNumConstructorArgs()); + Writer.AddDeclRef(E->getOperatorNew(), Record); + Writer.AddDeclRef(E->getOperatorDelete(), Record); + Writer.AddDeclRef(E->getConstructor(), Record); + Writer.AddSourceLocation(E->getStartLoc(), Record); + Writer.AddSourceLocation(E->getEndLoc(), Record); + for (CXXNewExpr::arg_iterator I = E->raw_arg_begin(), e = E->raw_arg_end(); + I != e; ++I) + Writer.WriteSubStmt(*I); + + Code = pch::EXPR_CXX_NEW; +} + + void PCHStmtWriter::VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) { VisitExpr(E); Record.push_back(E->getNumTemporaries()); @@ -1019,8 +1050,13 @@ void PCHWriter::WriteSubStmt(Stmt *S) { 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 sub statement writing PCH file"); + } +#endif Stream.EmitRecord(Writer.Code, Record); } |