diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-12-22 21:44:34 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-12-22 21:44:34 +0000 |
commit | 4c2458a5ae09fc22fc61aedd380daf54f96d6112 (patch) | |
tree | 2a186f23476c238761eb99bac84c670b7f1ea1c5 /lib/Sema/SemaOverload.cpp | |
parent | 9123666ed4ab82182b92f8d978a2801516dcd63d (diff) |
Switch parameter passing for overloaded binary operators to
InitializationSequence. Fixes the -fsyntax-only failure in
llvm/lib/Transforms/Scalar/InstructionCombining.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91921 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaOverload.cpp')
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 8236ad7eec..44eb184a36 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -13,6 +13,7 @@ #include "Sema.h" #include "Lookup.h" +#include "SemaInit.h" #include "clang/Basic/Diagnostic.h" #include "clang/Lex/Preprocessor.h" #include "clang/AST/ASTContext.h" @@ -5167,17 +5168,40 @@ Sema::CreateOverloadedBinOp(SourceLocation OpLoc, // Convert the arguments. if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) { - if (PerformObjectArgumentInitialization(Args[0], Method) || - PerformCopyInitialization(Args[1], FnDecl->getParamDecl(0)->getType(), - AA_Passing)) + OwningExprResult Arg1 + = PerformCopyInitialization( + InitializedEntity::InitializeParameter( + FnDecl->getParamDecl(0)), + SourceLocation(), + Owned(Args[1])); + if (Arg1.isInvalid()) return ExprError(); + + if (PerformObjectArgumentInitialization(Args[0], Method)) + return ExprError(); + + Args[1] = RHS = Arg1.takeAs<Expr>(); } else { // Convert the arguments. - if (PerformCopyInitialization(Args[0], FnDecl->getParamDecl(0)->getType(), - AA_Passing) || - PerformCopyInitialization(Args[1], FnDecl->getParamDecl(1)->getType(), - AA_Passing)) + OwningExprResult Arg0 + = PerformCopyInitialization( + InitializedEntity::InitializeParameter( + FnDecl->getParamDecl(0)), + SourceLocation(), + Owned(Args[0])); + if (Arg0.isInvalid()) + return ExprError(); + + OwningExprResult Arg1 + = PerformCopyInitialization( + InitializedEntity::InitializeParameter( + FnDecl->getParamDecl(1)), + SourceLocation(), + Owned(Args[1])); + if (Arg1.isInvalid()) return ExprError(); + Args[0] = LHS = Arg0.takeAs<Expr>(); + Args[1] = RHS = Arg1.takeAs<Expr>(); } // Determine the result type |