From bbeb5c391ca99b71ccb39df0aa7bc3197e66e0a6 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Tue, 22 Dec 2009 16:09:06 +0000 Subject: Switch parameter-passing for calls via function pointers (where we don't have a FunctionDecl) over to InitializationSequence. llvm-svn: 91906 --- clang/lib/Sema/SemaExpr.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'clang/lib/Sema/SemaExpr.cpp') diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index d01516c77fe..09e1d6f4551 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -3181,21 +3181,22 @@ bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, << Arg->getSourceRange())) return true; - // Pass the argument. - if (FDecl && i < FDecl->getNumParams()) { - ParmVarDecl *Param = FDecl->getParamDecl(i); - InitializedEntity Entity =InitializedEntity::InitializeParameter(Param); - OwningExprResult ArgE = PerformCopyInitialization(Entity, - SourceLocation(), - Owned(Arg)); - if (ArgE.isInvalid()) - return true; - - Arg = ArgE.takeAs(); - } else { - if (PerformCopyInitialization(Arg, ProtoArgType, AA_Passing)) - return true; - } + // Pass the argument + ParmVarDecl *Param = 0; + if (FDecl && i < FDecl->getNumParams()) + Param = FDecl->getParamDecl(i); + + + InitializedEntity Entity = + Param? InitializedEntity::InitializeParameter(Param) + : InitializedEntity::InitializeParameter(ProtoArgType); + OwningExprResult ArgE = PerformCopyInitialization(Entity, + SourceLocation(), + Owned(Arg)); + if (ArgE.isInvalid()) + return true; + + Arg = ArgE.takeAs(); if (!ProtoArgType->isReferenceType()) Arg = MaybeBindToTemporary(Arg).takeAs(); -- cgit v1.2.3