diff options
author | Alexis Hunt <alercah@gmail.com> | 2011-05-25 23:16:36 +0000 |
---|---|---|
committer | Alexis Hunt <alercah@gmail.com> | 2011-05-25 23:16:36 +0000 |
commit | 119c10ef231ee2c1f77fa865b8e1cd2aa0045af9 (patch) | |
tree | dc0f211d823450effcff39796675b1ddffdb16f3 /clang/lib/Sema/SemaOverload.cpp | |
parent | b0b8853a2ef6b32bb72a78d97e341b8e65e5eaa6 (diff) | |
download | bcm5719-llvm-119c10ef231ee2c1f77fa865b8e1cd2aa0045af9.tar.gz bcm5719-llvm-119c10ef231ee2c1f77fa865b8e1cd2aa0045af9.zip |
Update our diagnostics to properly account for move operations.
llvm-svn: 132096
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index c3f330e3710..e43c5fbbb59 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -6436,7 +6436,9 @@ enum OverloadCandidateKind { oc_constructor_template, oc_implicit_default_constructor, oc_implicit_copy_constructor, + oc_implicit_move_constructor, oc_implicit_copy_assignment, + oc_implicit_move_assignment, oc_implicit_inherited_constructor }; @@ -6458,8 +6460,15 @@ OverloadCandidateKind ClassifyOverloadCandidate(Sema &S, if (Ctor->getInheritedConstructor()) return oc_implicit_inherited_constructor; - return Ctor->isCopyConstructor() ? oc_implicit_copy_constructor - : oc_implicit_default_constructor; + if (Ctor->isDefaultConstructor()) + return oc_implicit_default_constructor; + + if (Ctor->isMoveConstructor()) + return oc_implicit_move_constructor; + + assert(Ctor->isCopyConstructor() && + "unexpected sort of implicit constructor"); + return oc_implicit_copy_constructor; } if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) { @@ -6468,6 +6477,9 @@ OverloadCandidateKind ClassifyOverloadCandidate(Sema &S, if (!Meth->isImplicit()) return isTemplate ? oc_method_template : oc_method; + if (Meth->isMoveAssignmentOperator()) + return oc_implicit_move_assignment; + assert(Meth->isCopyAssignmentOperator() && "implicit method is not copy assignment operator?"); return oc_implicit_copy_assignment; |