aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Driver/PrintParserCallbacks.cpp2
-rw-r--r--include/clang/Parse/Action.h8
-rw-r--r--include/clang/Parse/Ownership.h187
-rw-r--r--lib/Parse/ParseDecl.cpp2
-rw-r--r--lib/Parse/ParseExpr.cpp35
-rw-r--r--lib/Parse/ParseInit.cpp2
-rw-r--r--lib/Parse/ParseObjc.cpp22
-rw-r--r--lib/Parse/ParseStmt.cpp52
-rw-r--r--lib/Parse/Parser.cpp2
9 files changed, 114 insertions, 198 deletions
diff --git a/Driver/PrintParserCallbacks.cpp b/Driver/PrintParserCallbacks.cpp
index 90cdf45270..77d7ef18b8 100644
--- a/Driver/PrintParserCallbacks.cpp
+++ b/Driver/PrintParserCallbacks.cpp
@@ -497,7 +497,7 @@ namespace {
virtual OwningExprResult ActOnParenExpr(SourceLocation L, SourceLocation R,
ExprArg Val) {
llvm::cout << __FUNCTION__ << "\n";
- return move_res(Val); // Default impl returns operand.
+ return move(Val); // Default impl returns operand.
}
// Postfix Expressions.
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 28e63b353a..271a3a8297 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -94,9 +94,15 @@ public:
// is complete.
/// Single expressions or statements as arguments.
+#if !defined(DISABLE_SMART_POINTERS)
+ typedef ASTOwningResult<&ActionBase::DeleteExpr> ExprArg;
+ typedef ASTOwningResult<&ActionBase::DeleteStmt> StmtArg;
+ typedef ASTOwningResult<&ActionBase::DeleteTemplateArg> TemplateArgArg;
+#else
typedef ASTOwningPtr<&ActionBase::DeleteExpr> ExprArg;
typedef ASTOwningPtr<&ActionBase::DeleteStmt> StmtArg;
typedef ASTOwningPtr<&ActionBase::DeleteTemplateArg> TemplateArgArg;
+#endif
/// Multiple expressions or statements as arguments.
typedef ASTMultiPtr<&ActionBase::DeleteExpr> MultiExprArg;
@@ -602,7 +608,7 @@ public:
virtual OwningExprResult ActOnParenExpr(SourceLocation L, SourceLocation R,
ExprArg Val) {
- return move_res(Val); // Default impl returns operand.
+ return move(Val); // Default impl returns operand.
}
// Postfix Expressions.
diff --git a/include/clang/Parse/Ownership.h b/include/clang/Parse/Ownership.h
index 704d6b5f1e..6017db761f 100644
--- a/include/clang/Parse/Ownership.h
+++ b/include/clang/Parse/Ownership.h
@@ -105,6 +105,8 @@
// Flip this switch to measure performance impact of the smart pointers.
//#define DISABLE_SMART_POINTERS
+#include "llvm/ADT/PointerIntPair.h"
+
namespace clang
{
// Basic
@@ -228,9 +230,6 @@ namespace clang
/// has an extra flag to indicate an additional success status.
template <ASTDestroyer Destroyer> class ASTOwningResult;
- /// ASTOwningPtr - A moveable smart pointer for AST nodes.
- template <ASTDestroyer Destroyer> class ASTOwningPtr;
-
/// ASTMultiPtr - A moveable smart pointer to multiple AST nodes. Only owns
/// the individual pointers, not the array holding them.
template <ASTDestroyer Destroyer> class ASTMultiPtr;
@@ -250,19 +249,6 @@ namespace clang
ASTOwningResult<Destroyer> * operator ->() { return &Moved; }
};
- /// Move emulation helper for ASTOwningPtr. NEVER EVER use this class
- /// directly if you don't know what you're doing.
- template <ASTDestroyer Destroyer>
- class ASTPtrMover
- {
- ASTOwningPtr<Destroyer> &Moved;
-
- public:
- ASTPtrMover(ASTOwningPtr<Destroyer> &moved) : Moved(moved) {}
-
- ASTOwningPtr<Destroyer> * operator ->() { return &Moved; }
- };
-
/// Move emulation helper for ASTMultiPtr. NEVER EVER use this class
/// directly if you don't know what you're doing.
template <ASTDestroyer Destroyer>
@@ -279,91 +265,40 @@ namespace clang
void release();
};
}
-#endif
+#else
+ /// Kept only as a type-safe wrapper for a void pointer, when smart pointers
+ /// are disabled. When they are enabled, ASTOwningResult takes over.
template <ASTDestroyer Destroyer>
class ASTOwningPtr
{
-#if !defined(DISABLE_SMART_POINTERS)
- ActionBase *Actions;
-#endif
void *Node;
-#if !defined(DISABLE_SMART_POINTERS)
- friend class moving::ASTPtrMover<Destroyer>;
-
- ASTOwningPtr(ASTOwningPtr&); // DO NOT IMPLEMENT
- ASTOwningPtr& operator =(ASTOwningPtr&); // DO NOT IMPLEMENT
-
- void destroy() {
- if (Node) {
- assert(Actions && "Owning pointer without Action owns node.");
- (Actions->*Destroyer)(Node);
- }
- }
-#endif
-
public:
-#if !defined(DISABLE_SMART_POINTERS)
- explicit ASTOwningPtr(ActionBase &actions)
- : Actions(&actions), Node(0) {}
- ASTOwningPtr(ActionBase &actions, void *node)
- : Actions(&actions), Node(node) {}
- /// Move from another owning pointer
- ASTOwningPtr(moving::ASTPtrMover<Destroyer> mover)
- : Actions(mover->Actions), Node(mover->take()) {}
-
- /// Move assignment from another owning pointer
- ASTOwningPtr & operator =(moving::ASTPtrMover<Destroyer> mover) {
- Actions = mover->Actions;
- Node = mover->take();
- return *this;
- }
-
- /// Assignment from a raw pointer. Takes ownership - beware!
- ASTOwningPtr & operator =(void *raw) {
- assert((Actions || !raw) && "Cannot assign non-null raw without Action");
- Node = raw;
- return *this;
- }
-#else // Different set if smart pointers are disabled
explicit ASTOwningPtr(ActionBase &) : Node(0) {}
ASTOwningPtr(ActionBase &, void *node) : Node(node) {}
// Normal copying operators are defined implicitly.
- explicit ASTOwningPtr(void *ptr) : Node(ptr) {}
+ ASTOwningPtr(const ASTOwningResult<Destroyer> &o);
ASTOwningPtr & operator =(void *raw) {
Node = raw;
return *this;
}
-#endif
/// Access to the raw pointer.
void * get() const { return Node; }
/// Release the raw pointer.
void * take() {
-#if !defined(DISABLE_SMART_POINTERS)
- void *tmp = Node;
- Node = 0;
- return tmp;
-#else
return Node;
-#endif
}
/// Alias for interface familiarity with unique_ptr.
void * release() {
return take();
}
-
-#if !defined(DISABLE_SMART_POINTERS)
- /// Move hook
- operator moving::ASTPtrMover<Destroyer>() {
- return moving::ASTPtrMover<Destroyer>(*this);
- }
-#endif
};
+#endif
// Important: There are two different implementations of
// ASTOwningResult below, depending on whether
@@ -374,74 +309,84 @@ namespace clang
template <ASTDestroyer Destroyer>
class ASTOwningResult
{
- ASTOwningPtr<Destroyer> Ptr;
- bool Invalid;
+ llvm::PointerIntPair<ActionBase*, 1, bool> ActionInv;
+ void *Ptr;
friend class moving::ASTResultMover<Destroyer>;
ASTOwningResult(ASTOwningResult&); // DO NOT IMPLEMENT
ASTOwningResult& operator =(ASTOwningResult&); // DO NOT IMPLEMENT
+ void destroy() {
+ if (Ptr) {
+ assert(ActionInv.getPointer() &&
+ "Smart pointer has node but no action.");
+ (ActionInv.getPointer()->*Destroyer)(Ptr);
+ Ptr = 0;
+ }
+ }
+
public:
typedef ActionBase::ActionResult<DestroyerToUID<Destroyer>::UID> DumbResult;
explicit ASTOwningResult(ActionBase &actions, bool invalid = false)
- : Ptr(actions, 0), Invalid(invalid) {}
+ : ActionInv(&actions, invalid), Ptr(0) {}
ASTOwningResult(ActionBase &actions, void *node)
- : Ptr(actions, node), Invalid(false) {}
+ : ActionInv(&actions, false), Ptr(node) {}
ASTOwningResult(ActionBase &actions, const DumbResult &res)
- : Ptr(actions, res.get()), Invalid(res.isInvalid()) {}
+ : ActionInv(&actions, res.isInvalid()), Ptr(res.get()) {}
/// Move from another owning result
ASTOwningResult(moving::ASTResultMover<Destroyer> mover)
- : Ptr(moving::ASTPtrMover<Destroyer>(mover->Ptr)),
- Invalid(mover->Invalid) {}
- /// Move from an owning pointer
- ASTOwningResult(moving::ASTPtrMover<Destroyer> mover)
- : Ptr(mover), Invalid(false) {}
+ : ActionInv(mover->ActionInv),
+ Ptr(mover->Ptr) {
+ mover->Ptr = 0;
+ }
- /// Move assignment from another owning result
- ASTOwningResult & operator =(moving::ASTResultMover<Destroyer> mover) {
- Ptr = move(mover->Ptr);
- Invalid = mover->Invalid;
- return *this;
+ ~ASTOwningResult() {
+ destroy();
}
- /// Move assignment from an owning ptr
- ASTOwningResult & operator =(moving::ASTPtrMover<Destroyer> mover) {
- Ptr = mover;
- Invalid = false;
+ /// Move assignment from another owning result
+ ASTOwningResult & operator =(moving::ASTResultMover<Destroyer> mover) {
+ destroy();
+ ActionInv = mover->ActionInv;
+ Ptr = mover->Ptr;
+ mover->Ptr = 0;
return *this;
}
/// Assignment from a raw pointer. Takes ownership - beware!
- ASTOwningResult & operator =(void *raw)
- {
+ ASTOwningResult & operator =(void *raw) {
+ destroy();
Ptr = raw;
- Invalid = false;
+ ActionInv.setInt(false);
return *this;
}
/// Assignment from an ActionResult. Takes ownership - beware!
ASTOwningResult & operator =(const DumbResult &res) {
+ destroy();
Ptr = res.get();
- Invalid = res.isInvalid();
+ ActionInv.setInt(res.isInvalid());
return *this;
}
/// Access to the raw pointer.
- void * get() const { return Ptr.get(); }
+ void * get() const { return Ptr; }
- bool isInvalid() const { return Invalid; }
+ bool isInvalid() const { return ActionInv.getInt(); }
/// Does this point to a usable AST node? To be usable, the node must be
/// valid and non-null.
- bool isUsable() const { return !Invalid && get(); }
+ bool isUsable() const { return !isInvalid() && get(); }
/// Take outside ownership of the raw pointer.
void * take() {
- if (Invalid)
+ if (isInvalid())
return 0;
- return Ptr.take();
+ void *tmp = Ptr;
+ Ptr = 0;
+ return tmp;
}
/// Alias for interface familiarity with unique_ptr.
@@ -449,20 +394,15 @@ namespace clang
/// Pass ownership to a classical ActionResult.
DumbResult result() {
- if (Invalid)
+ if (isInvalid())
return true;
- return Ptr.take();
+ return take();
}
/// Move hook
operator moving::ASTResultMover<Destroyer>() {
return moving::ASTResultMover<Destroyer>(*this);
}
-
- /// Special function for moving to an OwningPtr.
- moving::ASTPtrMover<Destroyer> ptr_move() {
- return moving::ASTPtrMover<Destroyer>(Ptr);
- }
};
#else
template <ASTDestroyer Destroyer>
@@ -480,8 +420,7 @@ namespace clang
ASTOwningResult(ActionBase &actions, void *node) : Result(node) { }
ASTOwningResult(ActionBase &actions, const DumbResult &res) : Result(res) { }
// Normal copying semantics are defined implicitly.
- // The fake movers need this:
- explicit ASTOwningResult(void *ptr) : Result(ptr) { }
+ ASTOwningResult(const ASTOwningPtr<Destroyer> &o) : Result(o.get()) { }
/// Assignment from a raw pointer. Takes ownership - beware!
ASTOwningResult & operator =(void *raw)
@@ -616,28 +555,16 @@ namespace clang
}
template <ASTDestroyer Destroyer> inline
- ASTOwningPtr<Destroyer> move(ASTOwningPtr<Destroyer> &ptr) {
- return ASTOwningPtr<Destroyer>(moving::ASTPtrMover<Destroyer>(ptr));
- }
-
- template <ASTDestroyer Destroyer> inline
ASTMultiPtr<Destroyer> move(ASTMultiPtr<Destroyer> &ptr) {
return ASTMultiPtr<Destroyer>(moving::ASTMultiMover<Destroyer>(ptr));
}
- // These are necessary because of ambiguity problems.
+#else
template <ASTDestroyer Destroyer> inline
- ASTOwningPtr<Destroyer> move_arg(ASTOwningResult<Destroyer> &ptr) {
- return ASTOwningPtr<Destroyer>(ptr.ptr_move());
- }
-
- template <ASTDestroyer Destroyer> inline
- ASTOwningResult<Destroyer> move_res(ASTOwningPtr<Destroyer> &ptr) {
- return ASTOwningResult<Destroyer>(moving::ASTPtrMover<Destroyer>(ptr));
- }
-
-#else
+ ASTOwningPtr<Destroyer>::ASTOwningPtr(const ASTOwningResult<Destroyer> &o)
+ : Node(o.get())
+ {}
// These versions are hopefully no-ops.
template <ASTDestroyer Destroyer> inline
@@ -655,16 +582,6 @@ namespace clang
return ptr;
}
- template <ASTDestroyer Destroyer> inline
- ASTOwningPtr<Destroyer> move_arg(ASTOwningResult<Destroyer> &ptr) {
- return ASTOwningPtr<Destroyer>(ptr.take());
- }
-
- template <ASTDestroyer Destroyer> inline
- ASTOwningResult<Destroyer> move_res(ASTOwningPtr<Destroyer> &ptr) {
- return ASTOwningResult<Destroyer>(ptr.get());
- }
-
#endif
}
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index e2601b6cf4..bbd5d4bb86 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -312,7 +312,7 @@ ParseInitDeclaratorListAfterFirstDeclarator(Declarator &D) {
SkipUntil(tok::semi);
return 0;
}
- Actions.AddInitializerToDecl(LastDeclInGroup, move_arg(Init));
+ Actions.AddInitializerToDecl(LastDeclInGroup, move(Init));
} else if (Tok.is(tok::l_paren)) {
// Parse C++ direct initializer: '(' expression-list ')'
SourceLocation LParenLoc = ConsumeParen();
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index d20f294bc6..597c50c08a 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -205,7 +205,7 @@ Parser::ParseExpressionWithLeadingExtension(SourceLocation ExtLoc) {
if (LHS.isInvalid()) return move(LHS);
LHS = Actions.ActOnUnaryOp(CurScope, ExtLoc, tok::kw___extension__,
- move_arg(LHS));
+ move(LHS));
if (LHS.isInvalid()) return move(LHS);
return ParseRHSOfBinaryExpression(move(LHS), prec::Comma);
@@ -334,12 +334,11 @@ Parser::ParseRHSOfBinaryExpression(OwningExprResult LHS, unsigned MinPrec) {
// Combine the LHS and RHS into the LHS (e.g. build AST).
if (TernaryMiddle.isInvalid())
LHS = Actions.ActOnBinOp(CurScope, OpToken.getLocation(),
- OpToken.getKind(), move_arg(LHS),
- move_arg(RHS));
+ OpToken.getKind(), move(LHS), move(RHS));
else
LHS = Actions.ActOnConditionalOp(OpToken.getLocation(), ColonLoc,
- move_arg(LHS), move_arg(TernaryMiddle),
- move_arg(RHS));
+ move(LHS), move(TernaryMiddle),
+ move(RHS));
}
}
}
@@ -493,8 +492,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
// TODO: For cast expression with CastTy.
Res = ParseCastExpression(false);
if (!Res.isInvalid())
- Res = Actions.ActOnCastExpr(LParenLoc, CastTy, RParenLoc,
- move_arg(Res));
+ Res = Actions.ActOnCastExpr(LParenLoc, CastTy, RParenLoc, move(Res));
return move(Res);
}
@@ -570,7 +568,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
SourceLocation SavedLoc = ConsumeToken();
Res = ParseCastExpression(true);
if (!Res.isInvalid())
- Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move_arg(Res));
+ Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move(Res));
return move(Res);
}
case tok::amp: { // unary-expression: '&' cast-expression
@@ -578,7 +576,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
SourceLocation SavedLoc = ConsumeToken();
Res = ParseCastExpression(false, true);
if (!Res.isInvalid())
- Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move_arg(Res));
+ Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move(Res));
return move(Res);
}
@@ -592,7 +590,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
SourceLocation SavedLoc = ConsumeToken();
Res = ParseCastExpression(false);
if (!Res.isInvalid())
- Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move_arg(Res));
+ Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move(Res));
return move(Res);
}
@@ -602,7 +600,7 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
SourceLocation SavedLoc = ConsumeToken();
Res = ParseCastExpression(false);
if (!Res.isInvalid())
- Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move_arg(Res));
+ Res = Actions.ActOnUnaryOp(CurScope, SavedLoc, SavedKind, move(Res));
return move(Res);
}
case tok::kw_sizeof: // unary-expression: 'sizeof' unary-expression
@@ -765,8 +763,8 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
SourceLocation RLoc = Tok.getLocation();
if (!LHS.isInvalid() && !Idx.isInvalid() && Tok.is(tok::r_square)) {
- LHS = Actions.ActOnArraySubscriptExpr(CurScope, move_arg(LHS), Loc,
- move_arg(Idx), RLoc);
+ LHS = Actions.ActOnArraySubscriptExpr(CurScope, move(LHS), Loc,
+ move(Idx), RLoc);
} else
LHS = ExprError();
@@ -792,7 +790,7 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
if (!LHS.isInvalid() && Tok.is(tok::r_paren)) {
assert((ArgExprs.size() == 0 || ArgExprs.size()-1 == CommaLocs.size())&&
"Unexpected number of commas!");
- LHS = Actions.ActOnCallExpr(CurScope, move_arg(LHS), Loc,
+ LHS = Actions.ActOnCallExpr(CurScope, move(LHS), Loc,
move_arg(ArgExprs), &CommaLocs[0],
Tok.getLocation());
}
@@ -811,7 +809,7 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
}
if (!LHS.isInvalid()) {
- LHS = Actions.ActOnMemberReferenceExpr(CurScope, move_arg(LHS), OpLoc,
+ LHS = Actions.ActOnMemberReferenceExpr(CurScope, move(LHS), OpLoc,
OpKind, Tok.getLocation(),
*Tok.getIdentifierInfo());
}
@@ -822,7 +820,7 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) {
case tok::minusminus: // postfix-expression: postfix-expression '--'
if (!LHS.isInvalid()) {
LHS = Actions.ActOnPostfixUnaryOp(CurScope, Tok.getLocation(),
- Tok.getKind(), move_arg(LHS));
+ Tok.getKind(), move(LHS));
}
ConsumeToken();
break;
@@ -1128,7 +1126,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType,
ExprType = CompoundLiteral;
if (!Result.isInvalid())
return Actions.ActOnCompoundLiteral(OpenLoc, Ty, RParenLoc,
- move_arg(Result));
+ move(Result));
return move(Result);
}
@@ -1146,8 +1144,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType,
Result = ParseExpression();
ExprType = SimpleExpr;
if (!Result.isInvalid() && Tok.is(tok::r_paren))
- Result = Actions.ActOnParenExpr(OpenLoc, Tok.getLocation(),
- move_arg(Result));
+ Result = Actions.ActOnParenExpr(OpenLoc, Tok.getLocation(), move(Result));
}
// Match the ')'.
diff --git a/lib/Parse/ParseInit.cpp b/lib/Parse/ParseInit.cpp
index ec8470cb45..0b34feaedb 100644
--- a/lib/Parse/ParseInit.cpp
+++ b/lib/Parse/ParseInit.cpp
@@ -174,7 +174,7 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
return ParseAssignmentExprWithObjCMessageExprStart(StartLoc,
SourceLocation(),
- 0, move_arg(Idx));
+ 0, move(Idx));
}
// Create designation if we haven't already.
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index 5d7d7f1000..f45562644f 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -1202,7 +1202,7 @@ Parser::OwningStmtResult Parser::ParseObjCThrowStmt(SourceLocation atLoc) {
}
}
ConsumeToken(); // consume ';'
- return Actions.ActOnObjCAtThrowStmt(atLoc, move_arg(Res));
+ return Actions.ActOnObjCAtThrowStmt(atLoc, move(Res));
}
/// objc-synchronized-statement:
@@ -1239,8 +1239,7 @@ Parser::ParseObjCSynchronizedStmt(SourceLocation atLoc) {
BodyScope.Exit();
if (SynchBody.isInvalid())
SynchBody = Actions.ActOnNullStmt(Tok.getLocation());
- return Actions.ActOnObjCAtSynchronizedStmt(atLoc, move_arg(Res),
- move_arg(SynchBody));
+ return Actions.ActOnObjCAtSynchronizedStmt(atLoc, move(Res), move(SynchBody));
}
/// objc-try-catch-statement:
@@ -1313,8 +1312,8 @@ Parser::OwningStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {
if (CatchBody.isInvalid())
CatchBody = Actions.ActOnNullStmt(Tok.getLocation());
CatchStmts = Actions.ActOnObjCAtCatchStmt(AtCatchFinallyLoc,
- RParenLoc, move_arg(FirstPart), move_arg(CatchBody),
- move_arg(CatchStmts));
+ RParenLoc, move(FirstPart), move(CatchBody),
+ move(CatchStmts));
} else {
Diag(AtCatchFinallyLoc, diag::err_expected_lparen_after)
<< "@catch clause";
@@ -1334,7 +1333,7 @@ Parser::OwningStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {
if (FinallyBody.isInvalid())
FinallyBody = Actions.ActOnNullStmt(Tok.getLocation());
FinallyStmt = Actions.ActOnObjCAtFinallyStmt(AtCatchFinallyLoc,
- move_arg(FinallyBody));
+ move(FinallyBody));
catch_or_finally_seen = true;
break;
}
@@ -1343,9 +1342,8 @@ Parser::OwningStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {
Diag(atLoc, diag::err_missing_catch_finally);
return StmtError();
}
- return Actions.ActOnObjCAtTryStmt(atLoc, move_arg(TryBody),
- move_arg(CatchStmts),
- move_arg(FinallyStmt));
+ return Actions.ActOnObjCAtTryStmt(atLoc, move(TryBody), move(CatchStmts),
+ move(FinallyStmt));
}
/// objc-method-def: objc-method-proto ';'[opt] '{' body '}'
@@ -1387,7 +1385,7 @@ Parser::DeclTy *Parser::ParseObjCMethodDefinition() {
BodyScope.Exit();
// TODO: Pass argument information.
- Actions.ActOnFinishFunctionBody(MDecl, move_arg(FnBody));
+ Actions.ActOnFinishFunctionBody(MDecl, move(FnBody));
return MDecl;
}
@@ -1408,7 +1406,7 @@ Parser::OwningStmtResult Parser::ParseObjCAtStatement(SourceLocation AtLoc) {
}
// Otherwise, eat the semicolon.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
- return Actions.ActOnExprStmt(move_arg(Res));
+ return Actions.ActOnExprStmt(move(Res));
}
Parser::OwningExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
@@ -1459,7 +1457,7 @@ Parser::OwningExprResult Parser::ParseObjCMessageExpression() {
}
return ParseObjCMessageExpressionBody(LBracLoc, SourceLocation(),
- 0, move_arg(Res));
+ 0, move(Res));
}
/// ParseObjCMessageExpressionBody - Having parsed "'[' objc-receiver", parse
diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp
index 5ff09052f5..a8303997f7 100644
--- a/lib/Parse/ParseStmt.cpp
+++ b/lib/Parse/ParseStmt.cpp
@@ -118,7 +118,7 @@ Parser::ParseStatementOrDeclaration(bool OnlyStatement) {
}
// Otherwise, eat the semicolon.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
- return Actions.ActOnExprStmt(move_arg(Expr));
+ return Actions.ActOnExprStmt(move(Expr));
}
case tok::kw_case: // C99 6.8.1: labeled-statement
@@ -217,7 +217,7 @@ Parser::OwningStmtResult Parser::ParseLabeledStatement() {
return Actions.ActOnLabelStmt(IdentTok.getLocation(),
IdentTok.getIdentifierInfo(),
- ColonLoc, move_arg(SubStmt));
+ ColonLoc, move(SubStmt));
}
/// ParseCaseStatement
@@ -271,8 +271,8 @@ Parser::OwningStmtResult Parser::ParseCaseStatement() {
if (SubStmt.isInvalid())
SubStmt = Actions.ActOnNullStmt(ColonLoc);
- return Actions.ActOnCaseStmt(CaseLoc, move_arg(LHS), DotDotDotLoc,
- move_arg(RHS), ColonLoc, move_arg(SubStmt));
+ return Actions.ActOnCaseStmt(CaseLoc, move(LHS), DotDotDotLoc,
+ move(RHS), ColonLoc, move(SubStmt));
}
/// ParseDefaultStatement
@@ -303,7 +303,7 @@ Parser::OwningStmtResult Parser::ParseDefaultStatement() {
return StmtError();
return Actions.ActOnDefaultStmt(DefaultLoc, ColonLoc,
- move_arg(SubStmt), CurScope);
+ move(SubStmt), CurScope);
}
@@ -393,7 +393,7 @@ Parser::OwningStmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) {
// Eat the semicolon at the end of stmt and convert the expr into a
// statement.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
- R = Actions.ActOnExprStmt(move_arg(Res));
+ R = Actions.ActOnExprStmt(move(Res));
}
}
@@ -568,8 +568,8 @@ Parser::OwningStmtResult Parser::ParseIfStatement() {
if (ElseStmt.isInvalid())
ElseStmt = Actions.ActOnNullStmt(ElseStmtLoc);
- return Actions.ActOnIfStmt(IfLoc, move_arg(CondExp), move_arg(ThenStmt),
- ElseLoc, move_arg(ElseStmt));
+ return Actions.ActOnIfStmt(IfLoc, move(CondExp), move(ThenStmt),
+ ElseLoc, move(ElseStmt));
}
/// ParseSwitchStatement
@@ -612,7 +612,7 @@ Parser::OwningStmtResult Parser::ParseSwitchStatement() {
OwningStmtResult Switch(Actions);
if (!Cond.isInvalid())
- Switch = Actions.ActOnStartOfSwitchStmt(move_arg(Cond));
+ Switch = Actions.ActOnStartOfSwitchStmt(move(Cond));
// C99 6.8.4p3 - In C99, the body of the switch statement is a scope, even if
// there is no compound stmt. C90 does not have this clause. We only do this
@@ -644,8 +644,7 @@ Parser::OwningStmtResult Parser::ParseSwitchStatement() {
if (Cond.isInvalid())
return StmtError();
- return Actions.ActOnFinishSwitchStmt(SwitchLoc, move_arg(Switch),
- move_arg(Body));
+ return Actions.ActOnFinishSwitchStmt(SwitchLoc, move(Switch), move(Body));
}
/// ParseWhileStatement
@@ -714,7 +713,7 @@ Parser::OwningStmtResult Parser::ParseWhileStatement() {
if (Cond.isInvalid() || Body.isInvalid())
return StmtError();
- return Actions.ActOnWhileStmt(WhileLoc, move_arg(Cond), move_arg(Body));
+ return Actions.ActOnWhileStmt(WhileLoc, move(Cond), move(Body));
}
/// ParseDoStatement
@@ -778,7 +777,7 @@ Parser::OwningStmtResult Parser::ParseDoStatement() {
if (Cond.isInvalid() || Body.isInvalid())
return StmtError();
- return Actions.ActOnDoStmt(DoLoc, move_arg(Body), WhileLoc, move_arg(Cond));
+ return Actions.ActOnDoStmt(DoLoc, move(Body), WhileLoc, move(Cond));
}
/// ParseForStatement
@@ -860,7 +859,7 @@ Parser::OwningStmtResult Parser::ParseForStatement() {
// Turn the expression into a stmt.
if (!Value.isInvalid())
- FirstPart = Actions.ActOnExprStmt(move_arg(Value));
+ FirstPart = Actions.ActOnExprStmt(move(Value));
if (Tok.is(tok::semi)) {
ConsumeToken();
@@ -927,14 +926,14 @@ Parser::OwningStmtResult Parser::ParseForStatement() {
return StmtError();
if (!ForEach)
- return Actions.ActOnForStmt(ForLoc, LParenLoc, move_arg(FirstPart),
- move_arg(SecondPart), move_arg(ThirdPart),
- RParenLoc, move_arg(Body));
+ return Actions.ActOnForStmt(ForLoc, LParenLoc, move(FirstPart),
+ move(SecondPart), move(ThirdPart),
+ RParenLoc, move(Body));
else
return Actions.ActOnObjCForCollectionStmt(ForLoc, LParenLoc,
- move_arg(FirstPart),
- move_arg(SecondPart),
- RParenLoc, move_arg(Body));
+ move(FirstPart),
+ move(SecondPart),
+ RParenLoc, move(Body));
}
/// ParseGotoStatement
@@ -962,7 +961,7 @@ Parser::OwningStmtResult Parser::ParseGotoStatement() {
SkipUntil(tok::semi, false, true);
return StmtError();
}
- Res = Actions.ActOnIndirectGotoStmt(GotoLoc, StarLoc, move_arg(R));
+ Res = Actions.ActOnIndirectGotoStmt(GotoLoc, StarLoc, move(R));
} else {
Diag(Tok, diag::err_expected_ident);
return StmtError();
@@ -1008,7 +1007,7 @@ Parser::OwningStmtResult Parser::ParseReturnStatement() {
return StmtError();
}
}
- return Actions.ActOnReturnStmt(ReturnLoc, move_arg(R));
+ return Actions.ActOnReturnStmt(ReturnLoc, move(R));
}
/// FuzzyParseMicrosoftAsmStatement. When -fms-extensions is enabled, this
@@ -1148,7 +1147,7 @@ Parser::OwningStmtResult Parser::ParseAsmStatement(bool &msAsm) {
return Actions.ActOnAsmStmt(AsmLoc, isSimple, isVolatile,
NumOutputs, NumInputs, &Names[0],
move_arg(Constraints), move_arg(Exprs),
- move_arg(AsmString), move_arg(Clobbers),
+ move(AsmString), move_arg(Clobbers),
RParenLoc);
}
@@ -1233,7 +1232,7 @@ Parser::DeclTy *Parser::ParseFunctionStatementBody(DeclTy *Decl,
if (FnBody.isInvalid())
FnBody = Actions.ActOnCompoundStmt(L, R, MultiStmtArg(Actions), false);
- return Actions.ActOnFinishFunctionBody(Decl, move_arg(FnBody));
+ return Actions.ActOnFinishFunctionBody(Decl, move(FnBody));
}
/// ParseCXXTryBlock - Parse a C++ try-block.
@@ -1267,8 +1266,7 @@ Parser::OwningStmtResult Parser::ParseCXXTryBlock() {
if (Handlers.empty())
return StmtError();
- return Actions.ActOnCXXTryBlock(TryLoc, move_arg(TryBlock),
- move_arg(Handlers));
+ return Actions.ActOnCXXTryBlock(TryLoc, move(TryBlock), move_arg(Handlers));
}
/// ParseCXXCatchBlock - Parse a C++ catch block, called handler in the standard
@@ -1319,5 +1317,5 @@ Parser::OwningStmtResult Parser::ParseCXXCatchBlock() {
if (Block.isInvalid())
return move(Block);
- return Actions.ActOnCXXCatchBlock(CatchLoc, ExceptionDecl, move_arg(Block));
+ return Actions.ActOnCXXCatchBlock(CatchLoc, ExceptionDecl, move(Block));
}
diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index 2f7e2ea0fc..eb84a4a382 100644
--- a/lib/Parse/Parser.cpp
+++ b/lib/Parse/Parser.cpp
@@ -357,7 +357,7 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() {
"top-level asm block");
if (!Result.isInvalid())
- return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), move_arg(Result));
+ return Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), move(Result));
return 0;
}
case tok::at: