From 12cc7eeb821e536df420c90513936a42c901c263 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 6 May 2010 21:39:56 +0000 Subject: [PATCH] Fixed DISABLE_SMART_POINTERS breakage llvm-svn: 103198 --- clang/include/clang/Parse/Ownership.h | 2 +- clang/lib/Parse/ParseStmt.cpp | 4 +++- clang/lib/Sema/SemaExpr.cpp | 4 ++-- clang/lib/Sema/SemaExprCXX.cpp | 7 +++---- clang/lib/Sema/SemaStmt.cpp | 6 ++++-- clang/lib/Sema/TreeTransform.h | 20 ++++++++++++++------ 6 files changed, 27 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/Parse/Ownership.h b/clang/include/clang/Parse/Ownership.h index 5eb9635f06a1..dfbb301f3b21 100644 --- a/clang/include/clang/Parse/Ownership.h +++ b/clang/include/clang/Parse/Ownership.h @@ -166,7 +166,7 @@ namespace llvm { // conversions. // Flip this switch to measure performance impact of the smart pointers. -//#define DISABLE_SMART_POINTERS +// #define DISABLE_SMART_POINTERS namespace llvm { template<> diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 71bda78f6cbf..e68e0ead5b75 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -989,6 +989,7 @@ Parser::OwningStmtResult Parser::ParseForStatement(AttributeList *Attr) { bool ForEach = false; OwningStmtResult FirstPart(Actions); + bool SecondPartIsInvalid = false; FullExprArg SecondPart(Actions); OwningExprResult Collection(Actions); FullExprArg ThirdPart(Actions); @@ -1062,13 +1063,14 @@ Parser::OwningStmtResult Parser::ParseForStatement(AttributeList *Attr) { Second = Actions.ActOnBooleanCondition(CurScope, ForLoc, move(Second)); } + SecondPartIsInvalid = Second.isInvalid(); SecondPart = Actions.MakeFullExpr(Second); } if (Tok.is(tok::semi)) { ConsumeToken(); } else { - if (!SecondPart->isInvalid() || SecondVar.get()) + if (!SecondPartIsInvalid || SecondVar.get()) Diag(Tok, diag::err_expected_semi_for); SkipUntil(tok::semi); } diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 40c1ee9e6892..f35a2e866a91 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -7697,10 +7697,10 @@ bool Sema::CheckBooleanCondition(Expr *&E, SourceLocation Loc) { Sema::OwningExprResult Sema::ActOnBooleanCondition(Scope *S, SourceLocation Loc, ExprArg SubExpr) { - if (SubExpr.isInvalid()) + Expr *Sub = SubExpr.takeAs(); + if (!Sub) return ExprError(); - Expr *Sub = SubExpr.takeAs(); if (CheckBooleanCondition(Sub, Loc)) { Sub->Destroy(Context); return ExprError(); diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 35b38edbcaee..67ad45d74b24 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -2949,12 +2949,11 @@ CXXMemberCallExpr *Sema::BuildCXXMemberCallExpr(Expr *Exp, } Sema::OwningExprResult Sema::ActOnFinishFullExpr(ExprArg Arg) { - if (Arg.isInvalid()) - return ExprError(); - Expr *FullExpr = Arg.takeAs(); if (FullExpr) FullExpr = MaybeCreateCXXExprWithTemporaries(FullExpr); - + else + return ExprError(); + return Owned(FullExpr); } diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 3f75af685ed2..f9edbaff5f86 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -524,9 +524,11 @@ Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, ExprArg Cond, VarDecl *ConditionVar = 0; if (CondVar.get()) { ConditionVar = CondVar.getAs(); - Cond = CheckConditionVariable(ConditionVar, SourceLocation(), false); - if (Cond.isInvalid()) + OwningExprResult CondE = CheckConditionVariable(ConditionVar, SourceLocation(), false); + if (CondE.isInvalid()) return StmtError(); + + Cond = move(CondE); } Expr *CondExpr = Cond.takeAs(); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 43ffbfb737b2..9825086809af 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -763,9 +763,12 @@ public: SourceLocation ElseLoc, StmtArg Else) { if (Cond.get()) { // Convert the condition to a boolean value. - Cond = getSema().ActOnBooleanCondition(0, IfLoc, move(Cond)); - if (Cond.isInvalid()) + OwningExprResult CondE = getSema().ActOnBooleanCondition(0, IfLoc, + move(Cond)); + if (CondE.isInvalid()) return getSema().StmtError(); + + Cond = move(CondE); } Sema::FullExprArg FullCond(getSema().MakeFullExpr(Cond)); @@ -804,9 +807,11 @@ public: StmtArg Body) { if (Cond.get()) { // Convert the condition to a boolean value. - Cond = getSema().ActOnBooleanCondition(0, WhileLoc, move(Cond)); - if (Cond.isInvalid()) + OwningExprResult CondE = getSema().ActOnBooleanCondition(0, WhileLoc, + move(Cond)); + if (CondE.isInvalid()) return getSema().StmtError(); + Cond = move(CondE); } Sema::FullExprArg FullCond(getSema().MakeFullExpr(Cond)); @@ -838,9 +843,12 @@ public: SourceLocation RParenLoc, StmtArg Body) { if (Cond.get()) { // Convert the condition to a boolean value. - Cond = getSema().ActOnBooleanCondition(0, ForLoc, move(Cond)); - if (Cond.isInvalid()) + OwningExprResult CondE = getSema().ActOnBooleanCondition(0, ForLoc, + move(Cond)); + if (CondE.isInvalid()) return getSema().StmtError(); + + Cond = move(CondE); } Sema::FullExprArg FullCond(getSema().MakeFullExpr(Cond));