summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r--clang/lib/Sema/SemaInit.cpp48
1 files changed, 10 insertions, 38 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 570b2403324..125149edc25 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -4482,8 +4482,7 @@ static ExprResult CopyObject(Sema &S,
S.Diag(Loc, diag::err_temp_copy_deleted)
<< (int)Entity.getKind() << CurInitExpr->getType()
<< CurInitExpr->getSourceRange();
- S.Diag(Best->Function->getLocation(), diag::note_unavailable_here)
- << 1 << Best->Function->isDeleted();
+ S.NoteDeletedFunction(Best->Function);
return ExprError();
}
@@ -4592,8 +4591,7 @@ static void CheckCXX98CompatAccessibleCopy(Sema &S,
case OR_Deleted:
S.Diag(Loc, Diag);
- S.Diag(Best->Function->getLocation(), diag::note_unavailable_here)
- << 1 << Best->Function->isDeleted();
+ S.NoteDeletedFunction(Best->Function);
break;
}
}
@@ -5362,26 +5360,6 @@ InitializationSequence::Perform(Sema &S,
return move(CurInit);
}
-/// \brief Provide some notes that detail why a function was implicitly
-/// deleted.
-static void diagnoseImplicitlyDeletedFunction(Sema &S, CXXMethodDecl *Method) {
- // FIXME: This is a work in progress. It should dig deeper to figure out
- // why the function was deleted (e.g., because one of its members doesn't
- // have a copy constructor, for the copy-constructor case).
- if (!Method->isImplicit()) {
- S.Diag(Method->getLocation(), diag::note_callee_decl)
- << Method->getDeclName();
- }
-
- if (Method->getParent()->isLambda()) {
- S.Diag(Method->getParent()->getLocation(), diag::note_lambda_decl);
- return;
- }
-
- S.Diag(Method->getParent()->getLocation(), diag::note_defined_here)
- << Method->getParent();
-}
-
//===----------------------------------------------------------------------===//
// Diagnose initialization failures
//===----------------------------------------------------------------------===//
@@ -5469,8 +5447,7 @@ bool InitializationSequence::Diagnose(Sema &S,
= FailedCandidateSet.BestViableFunction(S, Kind.getLocation(), Best,
true);
if (Ovl == OR_Deleted) {
- S.Diag(Best->Function->getLocation(), diag::note_unavailable_here)
- << 1 << Best->Function->isDeleted();
+ S.NoteDeletedFunction(Best->Function);
} else {
llvm_unreachable("Inconsistent overload resolution?");
}
@@ -5661,20 +5638,15 @@ bool InitializationSequence::Diagnose(Sema &S,
// If this is a defaulted or implicitly-declared function, then
// it was implicitly deleted. Make it clear that the deletion was
// implicit.
- if (S.isImplicitlyDeleted(Best->Function)) {
+ if (S.isImplicitlyDeleted(Best->Function))
S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init)
- << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function))
+ << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function))
<< DestType << ArgsRange;
-
- diagnoseImplicitlyDeletedFunction(S,
- cast<CXXMethodDecl>(Best->Function));
- break;
- }
-
- S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init)
- << true << DestType << ArgsRange;
- S.Diag(Best->Function->getLocation(), diag::note_unavailable_here)
- << 1 << Best->Function->isDeleted();
+ else
+ S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init)
+ << true << DestType << ArgsRange;
+
+ S.NoteDeletedFunction(Best->Function);
break;
}
OpenPOWER on IntegriCloud