r256996 - Properly bind up any cleanups in an ExprWithCleanups after

John McCall via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 6 15:34:20 PST 2016


Author: rjmccall
Date: Wed Jan  6 17:34:20 2016
New Revision: 256996

URL: http://llvm.org/viewvc/llvm-project?rev=256996&view=rev
Log:
Properly bind up any cleanups in an ExprWithCleanups after
instantiating a default argument expression.

This was previously just working implicitly by reinstantiating
in the current context, but caching means that we weren't
registering cleanups in subsequent uses.

Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=256996&r1=256995&r2=256996&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Jan  6 17:34:20 2016
@@ -4313,17 +4313,16 @@ ExprResult Sema::BuildCXXDefaultArgExpr(
     if (Result.isInvalid())
       return ExprError();
 
-    Expr *Arg = Result.getAs<Expr>();
-    CheckCompletedExpr(Arg, Param->getOuterLocStart());
+    Result = ActOnFinishFullExpr(Result.getAs<Expr>(),
+                                 Param->getOuterLocStart());
+    if (Result.isInvalid())
+      return ExprError();
 
     // Remember the instantiated default argument.
-    Param->setDefaultArg(Arg);
+    Param->setDefaultArg(Result.getAs<Expr>());
     if (ASTMutationListener *L = getASTMutationListener()) {
       L->DefaultArgumentInstantiated(Param);
     }
-
-    // Build the default argument expression.
-    return CXXDefaultArgExpr::Create(Context, CallLoc, Param);
   }
 
   // If the default expression creates temporaries, we need to




More information about the cfe-commits mailing list