summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaOverload.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-22 00:21:20 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-22 00:21:20 +0000
commit4141d5bea240f3a01a01c94a778c6b4c4e839847 (patch)
treeabb6a30880c81bbd51ff446ab8660731b47a34cf /clang/lib/Sema/SemaOverload.cpp
parentea3e73e596406386de3de20a83071a35f7b0dd5f (diff)
downloadbcm5719-llvm-4141d5bea240f3a01a01c94a778c6b4c4e839847.tar.gz
bcm5719-llvm-4141d5bea240f3a01a01c94a778c6b4c4e839847.zip
When converting from a type to itself or one of its base classes via a
constructor call, the conversion is only a standard conversion sequence if that constructor is a copy constructor. This fixes PR5834 in a semi-lame way, because the "real" fix will be to move over to InitializationSequence. That will happen "soonish", but not now. llvm-svn: 91861
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index fbcb8074289..66aa4845b12 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -451,7 +451,8 @@ Sema::TryImplicitConversion(Expr* From, QualType ToType,
QualType FromCanon
= Context.getCanonicalType(From->getType().getUnqualifiedType());
QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
- if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
+ if (Constructor->isCopyConstructor(Context) &&
+ (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon))) {
// Turn this into a "standard" conversion sequence, so that it
// gets ranked with standard conversion sequences.
ICS.ConversionKind = ImplicitConversionSequence::StandardConversion;
OpenPOWER on IntegriCloud