From 52ab92bee00eb14e38dcbefc091d6b9aa5157506 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 6 Aug 2009 17:22:51 +0000 Subject: [PATCH] After reporting ill-formed copy constructor(12.8.p3) don't recurs and crash. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78323 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 3 ++- test/SemaCXX/copy-constructor-error.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test/SemaCXX/copy-constructor-error.cpp diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index c28e052ae6..0fb515e80d 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1344,7 +1344,8 @@ bool Sema::IsUserDefinedConversion(Expr *From, QualType ToType, = ToRecordDecl->lookup(ConstructorName); Con != ConEnd; ++Con) { CXXConstructorDecl *Constructor = cast(*Con); - if (Constructor->isConvertingConstructor()) + if (!Constructor->isInvalidDecl() && + Constructor->isConvertingConstructor()) AddOverloadCandidate(Constructor, &From, 1, CandidateSet, /*SuppressUserConversions=*/true, ForceRValue); } diff --git a/test/SemaCXX/copy-constructor-error.cpp b/test/SemaCXX/copy-constructor-error.cpp new file mode 100644 index 0000000000..afe741faa4 --- /dev/null +++ b/test/SemaCXX/copy-constructor-error.cpp @@ -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}} +} + -- 2.40.0