@@ -5971,21 +5971,25 @@ static ExprResult CopyObject(Sema &S,
5971
5971
break ;
5972
5972
5973
5973
case OR_No_Viable_Function:
5974
- S.Diag (Loc, IsExtraneousCopy && !S.isSFINAEContext ()
5975
- ? diag::ext_rvalue_to_reference_temp_copy_no_viable
5976
- : diag::err_temp_copy_no_viable)
5977
- << (int )Entity.getKind () << CurInitExpr->getType ()
5978
- << CurInitExpr->getSourceRange ();
5979
- CandidateSet.NoteCandidates (S, OCD_AllCandidates, CurInitExpr);
5974
+ CandidateSet.NoteCandidates (
5975
+ PartialDiagnosticAt (
5976
+ Loc, S.PDiag (IsExtraneousCopy && !S.isSFINAEContext ()
5977
+ ? diag::ext_rvalue_to_reference_temp_copy_no_viable
5978
+ : diag::err_temp_copy_no_viable)
5979
+ << (int )Entity.getKind () << CurInitExpr->getType ()
5980
+ << CurInitExpr->getSourceRange ()),
5981
+ S, OCD_AllCandidates, CurInitExpr);
5980
5982
if (!IsExtraneousCopy || S.isSFINAEContext ())
5981
5983
return ExprError ();
5982
5984
return CurInit;
5983
5985
5984
5986
case OR_Ambiguous:
5985
- S.Diag (Loc, diag::err_temp_copy_ambiguous)
5986
- << (int )Entity.getKind () << CurInitExpr->getType ()
5987
- << CurInitExpr->getSourceRange ();
5988
- CandidateSet.NoteCandidates (S, OCD_ViableCandidates, CurInitExpr);
5987
+ CandidateSet.NoteCandidates (
5988
+ PartialDiagnosticAt (Loc, S.PDiag (diag::err_temp_copy_ambiguous)
5989
+ << (int )Entity.getKind ()
5990
+ << CurInitExpr->getType ()
5991
+ << CurInitExpr->getSourceRange ()),
5992
+ S, OCD_ViableCandidates, CurInitExpr);
5989
5993
return ExprError ();
5990
5994
5991
5995
case OR_Deleted:
@@ -6120,13 +6124,13 @@ static void CheckCXX98CompatAccessibleCopy(Sema &S,
6120
6124
break ;
6121
6125
6122
6126
case OR_No_Viable_Function:
6123
- S. Diag ( Loc, Diag);
6124
- CandidateSet. NoteCandidates (S, OCD_AllCandidates, CurInitExpr);
6127
+ CandidateSet. NoteCandidates ( PartialDiagnosticAt ( Loc, Diag), S,
6128
+ OCD_AllCandidates, CurInitExpr);
6125
6129
break ;
6126
6130
6127
6131
case OR_Ambiguous:
6128
- S. Diag ( Loc, Diag);
6129
- CandidateSet. NoteCandidates (S, OCD_ViableCandidates, CurInitExpr);
6132
+ CandidateSet. NoteCandidates ( PartialDiagnosticAt ( Loc, Diag), S,
6133
+ OCD_ViableCandidates, CurInitExpr);
6130
6134
break ;
6131
6135
6132
6136
case OR_Deleted:
@@ -8399,19 +8403,22 @@ bool InitializationSequence::Diagnose(Sema &S,
8399
8403
case FK_UserConversionOverloadFailed:
8400
8404
switch (FailedOverloadResult) {
8401
8405
case OR_Ambiguous:
8402
- if (Failure == FK_UserConversionOverloadFailed)
8403
- S.Diag (Kind.getLocation (), diag::err_typecheck_ambiguous_condition)
8404
- << OnlyArg->getType () << DestType
8405
- << Args[0 ]->getSourceRange ();
8406
- else
8407
- S.Diag (Kind.getLocation (), diag::err_ref_init_ambiguous)
8408
- << DestType << OnlyArg->getType ()
8409
- << Args[0 ]->getSourceRange ();
8410
8406
8411
- FailedCandidateSet.NoteCandidates (S, OCD_ViableCandidates, Args);
8407
+ FailedCandidateSet.NoteCandidates (
8408
+ PartialDiagnosticAt (
8409
+ Kind.getLocation (),
8410
+ Failure == FK_UserConversionOverloadFailed
8411
+ ? (S.PDiag (diag::err_typecheck_ambiguous_condition)
8412
+ << OnlyArg->getType () << DestType
8413
+ << Args[0 ]->getSourceRange ())
8414
+ : (S.PDiag (diag::err_ref_init_ambiguous)
8415
+ << DestType << OnlyArg->getType ()
8416
+ << Args[0 ]->getSourceRange ())),
8417
+ S, OCD_ViableCandidates, Args);
8412
8418
break ;
8413
8419
8414
- case OR_No_Viable_Function:
8420
+ case OR_No_Viable_Function: {
8421
+ auto Cands = FailedCandidateSet.CompleteCandidates (S, OCD_AllCandidates, Args);
8415
8422
if (!S.RequireCompleteType (Kind.getLocation (),
8416
8423
DestType.getNonReferenceType (),
8417
8424
diag::err_typecheck_nonviable_condition_incomplete,
@@ -8421,9 +8428,9 @@ bool InitializationSequence::Diagnose(Sema &S,
8421
8428
<< OnlyArg->getType () << Args[0 ]->getSourceRange ()
8422
8429
<< DestType.getNonReferenceType ();
8423
8430
8424
- FailedCandidateSet.NoteCandidates (S, OCD_AllCandidates, Args );
8431
+ FailedCandidateSet.NoteCandidates (S, Args, Cands );
8425
8432
break ;
8426
-
8433
+ }
8427
8434
case OR_Deleted: {
8428
8435
S.Diag (Kind.getLocation (), diag::err_typecheck_deleted_function)
8429
8436
<< OnlyArg->getType () << DestType.getNonReferenceType ()
@@ -8587,9 +8594,11 @@ bool InitializationSequence::Diagnose(Sema &S,
8587
8594
// bad.
8588
8595
switch (FailedOverloadResult) {
8589
8596
case OR_Ambiguous:
8590
- S.Diag (Kind.getLocation (), diag::err_ovl_ambiguous_init)
8591
- << DestType << ArgsRange;
8592
- FailedCandidateSet.NoteCandidates (S, OCD_ViableCandidates, Args);
8597
+ FailedCandidateSet.NoteCandidates (
8598
+ PartialDiagnosticAt (Kind.getLocation (),
8599
+ S.PDiag (diag::err_ovl_ambiguous_init)
8600
+ << DestType << ArgsRange),
8601
+ S, OCD_ViableCandidates, Args);
8593
8602
break ;
8594
8603
8595
8604
case OR_No_Viable_Function:
@@ -8638,9 +8647,12 @@ bool InitializationSequence::Diagnose(Sema &S,
8638
8647
break ;
8639
8648
}
8640
8649
8641
- S.Diag (Kind.getLocation (), diag::err_ovl_no_viable_function_in_init)
8642
- << DestType << ArgsRange;
8643
- FailedCandidateSet.NoteCandidates (S, OCD_AllCandidates, Args);
8650
+ FailedCandidateSet.NoteCandidates (
8651
+ PartialDiagnosticAt (
8652
+ Kind.getLocation (),
8653
+ S.PDiag (diag::err_ovl_no_viable_function_in_init)
8654
+ << DestType << ArgsRange),
8655
+ S, OCD_AllCandidates, Args);
8644
8656
break ;
8645
8657
8646
8658
case OR_Deleted: {
@@ -9438,24 +9450,29 @@ QualType Sema::DeduceTemplateSpecializationFromInitializer(
9438
9450
9439
9451
switch (Result) {
9440
9452
case OR_Ambiguous:
9441
- Diag (Kind.getLocation (), diag::err_deduced_class_template_ctor_ambiguous)
9442
- << TemplateName;
9443
9453
// FIXME: For list-initialization candidates, it'd usually be better to
9444
9454
// list why they were not viable when given the initializer list itself as
9445
9455
// an argument.
9446
- Candidates.NoteCandidates (*this , OCD_ViableCandidates, Inits);
9456
+ Candidates.NoteCandidates (
9457
+ PartialDiagnosticAt (
9458
+ Kind.getLocation (),
9459
+ PDiag (diag::err_deduced_class_template_ctor_ambiguous)
9460
+ << TemplateName),
9461
+ *this , OCD_ViableCandidates, Inits);
9447
9462
return QualType ();
9448
9463
9449
9464
case OR_No_Viable_Function: {
9450
9465
CXXRecordDecl *Primary =
9451
9466
cast<ClassTemplateDecl>(Template)->getTemplatedDecl ();
9452
9467
bool Complete =
9453
9468
isCompleteType (Kind.getLocation (), Context.getTypeDeclType (Primary));
9454
- Diag (Kind.getLocation (),
9455
- Complete ? diag::err_deduced_class_template_ctor_no_viable
9456
- : diag::err_deduced_class_template_incomplete)
9457
- << TemplateName << !Guides.empty ();
9458
- Candidates.NoteCandidates (*this , OCD_AllCandidates, Inits);
9469
+ Candidates.NoteCandidates (
9470
+ PartialDiagnosticAt (
9471
+ Kind.getLocation (),
9472
+ PDiag (Complete ? diag::err_deduced_class_template_ctor_no_viable
9473
+ : diag::err_deduced_class_template_incomplete)
9474
+ << TemplateName << !Guides.empty ()),
9475
+ *this , OCD_AllCandidates, Inits);
9459
9476
return QualType ();
9460
9477
}
9461
9478
0 commit comments