From 9ff62af3aa22f383e978833409f232f5614fb26b Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 7 Nov 2013 18:45:03 +0000 Subject: PR17615: A delegating constructor initializer is a full-expression. Don't forget to clean up temporaries at the end of it. llvm-svn: 194213 --- clang/lib/AST/ExprConstant.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'clang/lib/AST') diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 2412facf05c..cd984a251c9 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -3623,8 +3623,11 @@ static bool HandleConstructorCall(SourceLocation CallLoc, const LValue &This, // If it's a delegating constructor, just delegate. if (Definition->isDelegatingConstructor()) { CXXConstructorDecl::init_const_iterator I = Definition->init_begin(); - if (!EvaluateInPlace(Result, Info, This, (*I)->getInit())) - return false; + { + FullExpressionRAII InitScope(Info); + if (!EvaluateInPlace(Result, Info, This, (*I)->getInit())) + return false; + } return EvaluateStmt(Result, Info, Definition->getBody()) != ESR_Failed; } -- cgit v1.2.3