diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-07-01 03:43:00 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-07-01 03:43:00 +0000 |
| commit | 7c42659cee567b32fffea47229e7ec348ba73007 (patch) | |
| tree | bb4700a6f5cf8379b7dbb6dc186eee271f73daf5 /clang/lib | |
| parent | 3671ad4571850ffe5248c73add85e329b2270219 (diff) | |
| download | bcm5719-llvm-7c42659cee567b32fffea47229e7ec348ba73007.tar.gz bcm5719-llvm-7c42659cee567b32fffea47229e7ec348ba73007.zip | |
When performing copy initialization via user-defined conversions,
don't allow two user-defined conversions. Fixes PR6595 (again).
llvm-svn: 107379
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index c2d6de749bf..3acec566709 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2858,7 +2858,6 @@ static void TryUserDefinedConversion(Sema &S, Con != ConEnd; ++Con) { NamedDecl *D = *Con; DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess()); - bool SuppressUserConversions = false; // Find the constructor (which may be a template). CXXConstructorDecl *Constructor = 0; @@ -2867,17 +2866,8 @@ static void TryUserDefinedConversion(Sema &S, if (ConstructorTmpl) Constructor = cast<CXXConstructorDecl>( ConstructorTmpl->getTemplatedDecl()); - else { + else Constructor = cast<CXXConstructorDecl>(D); - - // If we're performing copy initialization using a copy constructor, - // we suppress user-defined conversions on the arguments. - // FIXME: Move constructors? - if (Kind.getKind() == InitializationKind::IK_Copy && - Constructor->isCopyConstructor()) - SuppressUserConversions = true; - - } if (!Constructor->isInvalidDecl() && Constructor->isConvertingConstructor(AllowExplicit)) { @@ -2885,11 +2875,11 @@ static void TryUserDefinedConversion(Sema &S, S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl, /*ExplicitArgs*/ 0, &Initializer, 1, CandidateSet, - SuppressUserConversions); + /*SuppressUserConversions=*/true); else S.AddOverloadCandidate(Constructor, FoundDecl, &Initializer, 1, CandidateSet, - SuppressUserConversions); + /*SuppressUserConversions=*/true); } } } |

