Convert more expression actions to smart pointers.
Fix type of logical negation for C++.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62475 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 170ef1b..61c22d4 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -3436,7 +3436,7 @@
                               RParenLoc))
     return true;
 
-  return CheckFunctionCall(Method, TheCall.take());
+  return CheckFunctionCall(Method, TheCall.take()).release();
 }
 
 /// BuildCallToObjectOfClassType - Build a call to an object of class
@@ -3548,11 +3548,12 @@
     // object parameter to a function pointer. Perform the conversion
     // on the object argument, then let ActOnCallExpr finish the job.
     // FIXME: Represent the user-defined conversion in the AST!
-    ImpCastExprToType(Object, 
+    ImpCastExprToType(Object,
                       Conv->getConversionType().getNonReferenceType(),
                       Conv->getConversionType()->isReferenceType());
-    return ActOnCallExpr(S, (ExprTy*)Object, LParenLoc, (ExprTy**)Args, NumArgs,
-                         CommaLocs, RParenLoc);
+    return ActOnCallExpr(S, ExprArg(*this, Object), LParenLoc,
+                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
+                         CommaLocs, RParenLoc).release();
   }
 
   // We found an overloaded operator(). Build a CXXOperatorCallExpr
@@ -3630,7 +3631,7 @@
     }
   }
 
-  return CheckFunctionCall(Method, TheCall.take());
+  return CheckFunctionCall(Method, TheCall.take()).release();
 }
 
 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
@@ -3700,7 +3701,8 @@
   Base = new CXXOperatorCallExpr(FnExpr, &Base, 1, 
                                  Method->getResultType().getNonReferenceType(),
                                  OpLoc);
-  return ActOnMemberReferenceExpr(S, Base, OpLoc, tok::arrow, MemberLoc, Member);
+  return ActOnMemberReferenceExpr(S, ExprArg(*this, Base), OpLoc, tok::arrow,
+                                  MemberLoc, Member).release();
 }
 
 /// FixOverloadedFunctionReference - E is an expression that refers to