From: Dmitri Gribenko Date: Fri, 10 May 2013 00:43:44 +0000 (+0000) Subject: ArrayRef'ize ShuffleVectorExpr::setExprs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=27365ee830cec7cf52c088b400867ff67b0b3b23;p=clang 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 --- 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)); }