When transforming an expression statement (e.g., for template

instantiation), be sure to finish the expression statement by
providing a FullExprArg, making sure that temporaries get
destroyed. Fixes an obscure failure when parsing
llvm/LinkAllPasses.h.

llvm-svn: 88668
This commit is contained in:
Douglas Gregor 2009-11-13 18:34:26 +00:00
parent 420b0f1bd8
commit 07eae02fc7
2 changed files with 2 additions and 2 deletions

View File

@ -1348,7 +1348,7 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
if (const RecordType *FieldClassType =
Field->getType()->getAs<RecordType>()) {
CXXRecordDecl *FieldClassDecl
= cast<CXXRecordDecl>(FieldClassType->getDecl());
= cast<CXXRecordDecl>(FieldClassType->getDecl());
for (RecordDecl::field_iterator FA = FieldClassDecl->field_begin(),
EA = FieldClassDecl->field_end(); FA != EA; FA++) {
if (CXXBaseOrMemberInitializer *Value = AllBaseFields.lookup(*FA)) {

View File

@ -1709,7 +1709,7 @@ Sema::OwningStmtResult TreeTransform<Derived>::TransformStmt(Stmt *S) {
if (E.isInvalid())
return getSema().StmtError();
return getSema().Owned(E.takeAs<Stmt>());
return getSema().ActOnExprStmt(getSema().FullExpr(E));
}
}