diff options
author | James Y Knight <jyknight@google.com> | 2015-09-30 14:04:23 +0000 |
---|---|---|
committer | James Y Knight <jyknight@google.com> | 2015-09-30 14:04:23 +0000 |
commit | 48fefa3724c0d85b49dc78afd9b7c29ab560d190 (patch) | |
tree | ae1f9cdaccc2ec9b81bbca76bbcd0231132a3e89 /clang/lib/AST/ExprCXX.cpp | |
parent | 867a93824629589b07c9634897d7726942d58c50 (diff) | |
download | bcm5719-llvm-48fefa3724c0d85b49dc78afd9b7c29ab560d190.tar.gz bcm5719-llvm-48fefa3724c0d85b49dc78afd9b7c29ab560d190.zip |
Fix FunctionParmPackExpr::Create() to take a ParmVarDecl* array.
FunctionParmPackExpr actually stores an array of ParmVarDecl* (and
accessors return that). But, the FunctionParmPackExpr::Create()
constructor accepted an array of Decl *s instead.
It was easy for this mismatch to occur without any obvious sign of
something wrong, since both the store and the access used independent
'reinterpet_cast<XX>(this+1)' calls.
llvm-svn: 248905
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 0dd36715113..b7f266ceccb 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -1468,19 +1468,19 @@ TemplateArgument SubstNonTypeTemplateParmPackExpr::getArgumentPack() const { FunctionParmPackExpr::FunctionParmPackExpr(QualType T, ParmVarDecl *ParamPack, SourceLocation NameLoc, unsigned NumParams, - Decl * const *Params) - : Expr(FunctionParmPackExprClass, T, VK_LValue, OK_Ordinary, - true, true, true, true), - ParamPack(ParamPack), NameLoc(NameLoc), NumParameters(NumParams) { + ParmVarDecl *const *Params) + : Expr(FunctionParmPackExprClass, T, VK_LValue, OK_Ordinary, true, true, + true, true), + ParamPack(ParamPack), NameLoc(NameLoc), NumParameters(NumParams) { if (Params) std::uninitialized_copy(Params, Params + NumParams, - reinterpret_cast<Decl**>(this+1)); + reinterpret_cast<ParmVarDecl **>(this + 1)); } FunctionParmPackExpr * FunctionParmPackExpr::Create(const ASTContext &Context, QualType T, ParmVarDecl *ParamPack, SourceLocation NameLoc, - ArrayRef<Decl *> Params) { + ArrayRef<ParmVarDecl *> Params) { return new (Context.Allocate(sizeof(FunctionParmPackExpr) + sizeof(ParmVarDecl*) * Params.size())) FunctionParmPackExpr(T, ParamPack, NameLoc, Params.size(), Params.data()); |