From 27365ee830cec7cf52c088b400867ff67b0b3b23 Mon Sep 17 00:00:00 2001 From: Dmitri Gribenko Date: Fri, 10 May 2013 00:43:44 +0000 Subject: [PATCH] ArrayRef'ize ShuffleVectorExpr::setExprs But ShuffleVectorExpr should be tail-allocating the storage for expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181572 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Expr.h | 2 +- lib/AST/Expr.cpp | 7 +++---- lib/Serialization/ASTReaderStmt.cpp | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 4ff1257b7d..9509456839 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -3450,7 +3450,7 @@ public: return cast(SubExprs[Index]); } - void setExprs(ASTContext &C, Expr ** Exprs, unsigned NumExprs); + void setExprs(ASTContext &C, ArrayRef Exprs); unsigned getShuffleMaskIdx(ASTContext &Ctx, unsigned N) const { assert((N < NumExprs - 2) && "Shuffle idx out of range!"); diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 9538ddf941..545d5fe28c 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -3565,13 +3565,12 @@ ShuffleVectorExpr::ShuffleVectorExpr(ASTContext &C, ArrayRef args, } } -void ShuffleVectorExpr::setExprs(ASTContext &C, Expr ** Exprs, - unsigned NumExprs) { +void ShuffleVectorExpr::setExprs(ASTContext &C, ArrayRef Exprs) { if (SubExprs) C.Deallocate(SubExprs); SubExprs = new (C) Stmt* [NumExprs]; - this->NumExprs = NumExprs; - memcpy(SubExprs, Exprs, sizeof(Expr *) * NumExprs); + this->NumExprs = Exprs.size(); + memcpy(SubExprs, Exprs.data(), sizeof(Expr *) * Exprs.size()); } GenericSelectionExpr::GenericSelectionExpr(ASTContext &Context, diff --git a/lib/Serialization/ASTReaderStmt.cpp b/lib/Serialization/ASTReaderStmt.cpp index e1357ba5e6..04fc2bde2e 100644 --- a/lib/Serialization/ASTReaderStmt.cpp +++ b/lib/Serialization/ASTReaderStmt.cpp @@ -847,7 +847,7 @@ void ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { unsigned NumExprs = Record[Idx++]; while (NumExprs--) Exprs.push_back(Reader.ReadSubExpr()); - E->setExprs(Reader.getContext(), Exprs.data(), Exprs.size()); + E->setExprs(Reader.getContext(), Exprs); E->setBuiltinLoc(ReadSourceLocation(Record, Idx)); E->setRParenLoc(ReadSourceLocation(Record, Idx)); } -- 2.40.0