After reporting ill-formed copy constructor(12.8.p3)

don't recurs and crash.

llvm-svn: 78323
This commit is contained in:
Fariborz Jahanian 2009-08-06 17:22:51 +00:00
parent b4764e5b7f
commit 11a8e95a1a
2 changed files with 15 additions and 1 deletions

View File

@ -1344,7 +1344,8 @@ bool Sema::IsUserDefinedConversion(Expr *From, QualType ToType,
= ToRecordDecl->lookup(ConstructorName); = ToRecordDecl->lookup(ConstructorName);
Con != ConEnd; ++Con) { Con != ConEnd; ++Con) {
CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
if (Constructor->isConvertingConstructor()) if (!Constructor->isInvalidDecl() &&
Constructor->isConvertingConstructor())
AddOverloadCandidate(Constructor, &From, 1, CandidateSet, AddOverloadCandidate(Constructor, &From, 1, CandidateSet,
/*SuppressUserConversions=*/true, ForceRValue); /*SuppressUserConversions=*/true, ForceRValue);
} }

View File

@ -0,0 +1,13 @@
// RUN: clang-cc -fsyntax-only -verify %s
struct S { // expected-note {{candidate function}}
S (S); // expected-error {{copy constructor must pass its first argument by reference}} \\
// expected-note {{candidate function}}
};
S f();
void g() {
S a( f() ); // expected-error {{call to constructor of 'a' is ambiguous}}
}