diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-24 08:57:09 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-24 08:57:09 +0000 |
commit | 5e1b7c2f419544a88537f7ff4e32ed744ba7b44e (patch) | |
tree | 3587271c422e631990916bb1e8d1198c1d787a49 /lib/Frontend/PCHReaderStmt.cpp | |
parent | 1f84f8d970a673e487b40d341cd3e8d52ca9cc22 (diff) |
Fix broken de/serialization for a couple of C++ Exprs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106726 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHReaderStmt.cpp')
-rw-r--r-- | lib/Frontend/PCHReaderStmt.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/Frontend/PCHReaderStmt.cpp b/lib/Frontend/PCHReaderStmt.cpp index 4a38a36367..652fdb1cf2 100644 --- a/lib/Frontend/PCHReaderStmt.cpp +++ b/lib/Frontend/PCHReaderStmt.cpp @@ -957,12 +957,15 @@ unsigned PCHStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { unsigned PCHStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { VisitExpr(E); + assert(Record[Idx] == E->getNumArgs() && + "Read wrong record during creation ?"); + ++Idx; // NumArgs; + for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) + E->setArg(I, cast<Expr>(StmtStack[StmtStack.size() - N + I])); E->setConstructor(cast<CXXConstructorDecl>(Reader.GetDecl(Record[Idx++]))); E->setLocation(SourceLocation::getFromRawEncoding(Record[Idx++])); E->setElidable(Record[Idx++]); E->setRequiresZeroInitialization(Record[Idx++]); - for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) - E->setArg(I, cast<Expr>(StmtStack[StmtStack.size() - N + I])); E->setConstructionKind((CXXConstructExpr::ConstructionKind)Record[Idx++]); return E->getNumArgs(); } @@ -1032,7 +1035,7 @@ unsigned PCHStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { unsigned PCHStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { VisitExpr(E); E->setThrowLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); - E->setSubExpr(cast<Expr>(StmtStack.back())); + E->setSubExpr(cast_or_null<Expr>(StmtStack.back())); return 1; } @@ -1431,7 +1434,7 @@ Stmt *PCHReader::ReadStmt(llvm::BitstreamCursor &Cursor) { case pch::EXPR_CXX_CONSTRUCT: S = new (Context) CXXConstructExpr(Empty, *Context, - Record[PCHStmtReader::NumExprFields + 2]); + Record[PCHStmtReader::NumExprFields]); break; case pch::EXPR_CXX_STATIC_CAST: |