Index: cfe/trunk/lib/Analysis/BodyFarm.cpp =================================================================== --- cfe/trunk/lib/Analysis/BodyFarm.cpp +++ cfe/trunk/lib/Analysis/BodyFarm.cpp @@ -63,8 +63,7 @@ /// Create a new DeclRefExpr for the referenced variable. DeclRefExpr *makeDeclRefExpr(const VarDecl *D, - bool RefersToEnclosingVariableOrCapture = false, - bool GetNonReferenceType = false); + bool RefersToEnclosingVariableOrCapture = false); /// Create a new UnaryOperator representing a dereference. UnaryOperator *makeDereference(const Expr *Arg, QualType Ty); @@ -82,8 +81,7 @@ /// DeclRefExpr in the process. ImplicitCastExpr * makeLvalueToRvalue(const VarDecl *Decl, - bool RefersToEnclosingVariableOrCapture = false, - bool GetNonReferenceType = false); + bool RefersToEnclosingVariableOrCapture = false); /// Create an implicit cast of the given type. ImplicitCastExpr *makeImplicitCast(const Expr *Arg, QualType Ty, @@ -138,12 +136,10 @@ return new (C) CompoundStmt(C, Stmts, SourceLocation(), SourceLocation()); } -DeclRefExpr *ASTMaker::makeDeclRefExpr(const VarDecl *D, - bool RefersToEnclosingVariableOrCapture, - bool GetNonReferenceType) { - auto Type = D->getType(); - if (GetNonReferenceType) - Type = Type.getNonReferenceType(); +DeclRefExpr *ASTMaker::makeDeclRefExpr( + const VarDecl *D, + bool RefersToEnclosingVariableOrCapture) { + QualType Type = D->getType().getNonReferenceType(); DeclRefExpr *DR = DeclRefExpr::Create( C, NestedNameSpecifierLoc(), SourceLocation(), const_cast(D), @@ -162,14 +158,10 @@ ImplicitCastExpr * ASTMaker::makeLvalueToRvalue(const VarDecl *Arg, - bool RefersToEnclosingVariableOrCapture, - bool GetNonReferenceType) { - auto Type = Arg->getType(); - if (GetNonReferenceType) - Type = Type.getNonReferenceType(); + bool RefersToEnclosingVariableOrCapture) { + QualType Type = Arg->getType().getNonReferenceType(); return makeLvalueToRvalue(makeDeclRefExpr(Arg, - RefersToEnclosingVariableOrCapture, - GetNonReferenceType), + RefersToEnclosingVariableOrCapture), Type); } @@ -365,12 +357,13 @@ // Lambda requires callback itself inserted as a first parameter. CallArgs.push_back( M.makeDeclRefExpr(Callback, - /* RefersToEnclosingVariableOrCapture= */ true, - /* GetNonReferenceType= */ true)); + /* RefersToEnclosingVariableOrCapture= */ true)); // All arguments past first two ones are passed to the callback. for (unsigned int i = 2; i < D->getNumParams(); i++) - CallArgs.push_back(M.makeLvalueToRvalue(D->getParamDecl(i))); + CallArgs.push_back( + M.makeLvalueToRvalue(D->getParamDecl(i), + /* RefersToEnclosingVariableOrCapture= */ false)); CallExpr *CallbackCall; if (isLambdaCall) { @@ -385,8 +378,7 @@ DeclRefExpr *FlagDecl = M.makeDeclRefExpr(Flag, - /* RefersToEnclosingVariableOrCapture=*/true, - /* GetNonReferenceType=*/true); + /* RefersToEnclosingVariableOrCapture=*/true); MemberExpr *Deref = M.makeMemberExpression(FlagDecl, FlagFieldDecl); Index: cfe/trunk/test/Analysis/call_once.cpp =================================================================== --- cfe/trunk/test/Analysis/call_once.cpp +++ cfe/trunk/test/Analysis/call_once.cpp @@ -17,7 +17,7 @@ #endif template -void call_once(once_flag &o, Callable func, Args... args) {}; +void call_once(once_flag &o, Callable&& func, Args&&... args) {}; } // namespace std