diff options
author | Bruno Ricci <riccibrun@gmail.com> | 2018-11-20 16:20:40 +0000 |
---|---|---|
committer | Bruno Ricci <riccibrun@gmail.com> | 2018-11-20 16:20:40 +0000 |
commit | f49e1ca04d3fc2bdd7b4eaa55e70609c6172ca09 (patch) | |
tree | 84f6999b22751929ae8539b521c7f181422ffb4a /clang/lib/Serialization/ASTReaderStmt.cpp | |
parent | 855dfee2c2b4a591826d0a596425addfc9e70a93 (diff) | |
download | bcm5719-llvm-f49e1ca04d3fc2bdd7b4eaa55e70609c6172ca09.tar.gz bcm5719-llvm-f49e1ca04d3fc2bdd7b4eaa55e70609c6172ca09.zip |
[AST] Store the expressions in ParenListExpr in a trailing array
Use the newly available space in the bit-fields of Stmt
and store the expressions in a trailing array. This saves
2 pointer per ParenListExpr.
Differential Revision: https://reviews.llvm.org/D54675
Reviewed By: rjmccall
llvm-svn: 347320
Diffstat (limited to 'clang/lib/Serialization/ASTReaderStmt.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index db790c5ebf7..a9baca87747 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -643,10 +643,9 @@ void ASTStmtReader::VisitParenExpr(ParenExpr *E) { void ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { VisitExpr(E); unsigned NumExprs = Record.readInt(); - E->Exprs = new (Record.getContext()) Stmt*[NumExprs]; - for (unsigned i = 0; i != NumExprs; ++i) - E->Exprs[i] = Record.readSubStmt(); - E->NumExprs = NumExprs; + assert((NumExprs == E->getNumExprs()) && "Wrong NumExprs!"); + for (unsigned I = 0; I != NumExprs; ++I) + E->getTrailingObjects<Stmt *>()[I] = Record.readSubStmt(); E->LParenLoc = ReadSourceLocation(); E->RParenLoc = ReadSourceLocation(); } @@ -2452,7 +2451,9 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { break; case EXPR_PAREN_LIST: - S = new (Context) ParenListExpr(Empty); + S = ParenListExpr::CreateEmpty( + Context, + /* NumExprs=*/Record[ASTStmtReader::NumExprFields + 0]); break; case EXPR_UNARY_OPERATOR: |