diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-05-06 21:39:56 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-05-06 21:39:56 +0000 |
commit | 12cc7eeb821e536df420c90513936a42c901c263 (patch) | |
tree | c7c57e17a52c427277571fe5f09e674f21f8c47f /clang | |
parent | 66bfb27545e32172b80581f2c40b9d088ef1cb3b (diff) | |
download | bcm5719-llvm-12cc7eeb821e536df420c90513936a42c901c263.tar.gz bcm5719-llvm-12cc7eeb821e536df420c90513936a42c901c263.zip |
Fixed DISABLE_SMART_POINTERS breakage
llvm-svn: 103198
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Parse/Ownership.h | 2 | ||||
-rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 6 | ||||
-rw-r--r-- | 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 5eb9635f06a..dfbb301f3b2 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 71bda78f6cb..e68e0ead5b7 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 40c1ee9e689..f35a2e866a9 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<Expr>(); + if (!Sub) return ExprError(); - Expr *Sub = SubExpr.takeAs<Expr>(); if (CheckBooleanCondition(Sub, Loc)) { Sub->Destroy(Context); return ExprError(); diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 35b38edbcae..67ad45d74b2 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<Expr>(); 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 3f75af685ed..f9edbaff5f8 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<VarDecl>(); - 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<Expr>(); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 43ffbfb737b..9825086809a 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)); |