]> granicus.if.org Git - clang/commitdiff
Fix for PR5730: make sure to consistently call
authorEli Friedman <eli.friedman@gmail.com>
Wed, 9 Dec 2009 04:53:56 +0000 (04:53 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 9 Dec 2009 04:53:56 +0000 (04:53 +0000)
PerformObjectArgumentInitialization from BuildCXXMemberCallExpr.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90950 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprCXX.cpp

index d83148c21062abad38fefb63ee7a849906d07500..f52f4c90c372717a1dfa4266a679e662227987f3 100644 (file)
@@ -2176,15 +2176,13 @@ Sema::ActOnStartCXXMemberReference(Scope *S, ExprArg Base, SourceLocation OpLoc,
 
 CXXMemberCallExpr *Sema::BuildCXXMemberCallExpr(Expr *Exp, 
                                                 CXXMethodDecl *Method) {
+  if (PerformObjectArgumentInitialization(Exp, Method))
+    assert(0 && "Calling BuildCXXMemberCallExpr with invalid call?");
+
   MemberExpr *ME = 
       new (Context) MemberExpr(Exp, /*IsArrow=*/false, Method, 
                                SourceLocation(), Method->getType());
-  QualType ResultType;
-  if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(Method))
-    ResultType = Conv->getConversionType().getNonReferenceType();
-  else
-    ResultType = Method->getResultType().getNonReferenceType();
-
+  QualType ResultType = Method->getResultType().getNonReferenceType();
   MarkDeclarationReferenced(Exp->getLocStart(), Method);
   CXXMemberCallExpr *CE =
     new (Context) CXXMemberCallExpr(Context, ME, 0, 0, ResultType,
@@ -2220,11 +2218,7 @@ Sema::OwningExprResult Sema::BuildCXXCastArgument(SourceLocation CastLoc,
 
   case CastExpr::CK_UserDefinedConversion: {
     assert(!From->getType()->isPointerType() && "Arg can't have pointer type!");
-  
-    // Cast to base if needed.
-    if (PerformObjectArgumentInitialization(From, Method))
-      return ExprError();
-    
+
     // Create an implicit call expr that calls it.
     CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(From, Method);
     return MaybeBindToTemporary(CE);