From 53c374f1ac6d28b2341b3a8f3902eb51db9c50e7 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Tue, 7 Dec 2010 00:41:46 +0000 Subject: [PATCH] Use Sema::MaybeCreateExprWithCleanups() only after we've checked for a NULL/invalid expression git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121081 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 4 ++-- lib/Sema/SemaDeclCXX.cpp | 19 +++++++------------ lib/Sema/SemaExpr.cpp | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index aa2e2a53d6..88512af8b3 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -3037,7 +3037,7 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, SourceLocation(), Owned(E)); if (!Res.isInvalid()) { - Res = MaybeCreateExprWithCleanups(Res.get()); + Res = MaybeCreateExprWithCleanups(Res); Expr *Init = Res.takeAs(); Context.setBlockVarCopyInits(NewVD, Init); } @@ -4805,7 +4805,7 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl, if (Init.isInvalid()) Var->setInvalidDecl(); else if (Init.get()) { - Var->setInit(MaybeCreateExprWithCleanups(Init.takeAs())); + Var->setInit(MaybeCreateExprWithCleanups(Init.get())); if (getLangOptions().CPlusPlus && !Var->isInvalidDecl() && Var->hasGlobalStorage() && !Var->isStaticLocal() && diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 02688b8f65..781d2b83e0 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1327,7 +1327,7 @@ Sema::BuildMemberInitializer(ValueDecl *Member, Expr **Args, // C++0x [class.base.init]p7: // The initialization of each base and member constitutes a // full-expression. - MemberInit = MaybeCreateExprWithCleanups(MemberInit.get()); + MemberInit = MaybeCreateExprWithCleanups(MemberInit); if (MemberInit.isInvalid()) return true; @@ -1459,7 +1459,7 @@ Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, // C++0x [class.base.init]p7: // The initialization of each base and member constitutes a // full-expression. - BaseInit = MaybeCreateExprWithCleanups(BaseInit.get()); + BaseInit = MaybeCreateExprWithCleanups(BaseInit); if (BaseInit.isInvalid()) return true; @@ -1552,10 +1552,7 @@ BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, assert(false && "Unhandled initializer kind!"); } - if (BaseInit.isInvalid()) - return true; - - BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit.get()); + BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit); if (BaseInit.isInvalid()) return true; @@ -1669,7 +1666,7 @@ BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, ExprResult MemberInit = InitSeq.Perform(SemaRef, Entities.back(), InitKind, MultiExprArg(&CopyCtorArgE, 1)); - MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit.get()); + MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit); if (MemberInit.isInvalid()) return true; @@ -1694,10 +1691,8 @@ BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0); ExprResult MemberInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg()); - if (MemberInit.isInvalid()) - return true; - MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit.get()); + MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit); if (MemberInit.isInvalid()) return true; @@ -5547,7 +5542,7 @@ void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl, CheckImplicitConversions(Result.get(), LParenLoc); - Result = MaybeCreateExprWithCleanups(Result.get()); + Result = MaybeCreateExprWithCleanups(Result); VDecl->setInit(Result.takeAs()); VDecl->setCXXDirectInitializer(true); @@ -7037,7 +7032,7 @@ void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) { InitializationSequence InitSeq(*this, InitEntity, InitKind, 0, 0); ExprResult MemberInit = InitSeq.Perform(*this, InitEntity, InitKind, MultiExprArg()); - MemberInit = MaybeCreateExprWithCleanups(MemberInit.get()); + MemberInit = MaybeCreateExprWithCleanups(MemberInit); // Note, MemberInit could actually come back empty if no initialization // is required (e.g., because it would call a trivial default constructor) if (!MemberInit.get() || MemberInit.isInvalid()) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index a1ea57ebcf..9038750591 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2278,7 +2278,7 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, SourceLocation(), Owned(E)); if (!Res.isInvalid()) { - Res = MaybeCreateExprWithCleanups(Res.get()); + Res = MaybeCreateExprWithCleanups(Res); Expr *Init = Res.takeAs(); BDRE->setCopyConstructorExpr(Init); } -- 2.40.0