@@ -553,7 +553,7 @@ struct CheckFallThroughDiagnostics {
553
553
static CheckFallThroughDiagnostics MakeForFunction (const Decl *Func) {
554
554
CheckFallThroughDiagnostics D;
555
555
D.FuncLoc = Func->getLocation ();
556
- D.diag_FallThrough_HasNoReturn = diag::warn_falloff_noreturn_function ;
556
+ D.diag_FallThrough_HasNoReturn = diag::warn_noreturn_has_return_expr ;
557
557
D.diag_FallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid;
558
558
559
559
// Don't suggest that virtual functions be marked "noreturn", since they
@@ -588,7 +588,7 @@ struct CheckFallThroughDiagnostics {
588
588
589
589
static CheckFallThroughDiagnostics MakeForBlock () {
590
590
CheckFallThroughDiagnostics D;
591
- D.diag_FallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr ;
591
+ D.diag_FallThrough_HasNoReturn = diag::err_noreturn_has_return_expr ;
592
592
D.diag_FallThrough_ReturnsNonVoid = diag::err_falloff_nonvoid;
593
593
D.diag_NeverFallThroughOrReturn = 0 ;
594
594
D.funMode = Block;
@@ -597,7 +597,7 @@ struct CheckFallThroughDiagnostics {
597
597
598
598
static CheckFallThroughDiagnostics MakeForLambda () {
599
599
CheckFallThroughDiagnostics D;
600
- D.diag_FallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr ;
600
+ D.diag_FallThrough_HasNoReturn = diag::err_noreturn_has_return_expr ;
601
601
D.diag_FallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid;
602
602
D.diag_NeverFallThroughOrReturn = 0 ;
603
603
D.funMode = Lambda;
@@ -610,7 +610,7 @@ struct CheckFallThroughDiagnostics {
610
610
return (ReturnsVoid ||
611
611
D.isIgnored (diag::warn_falloff_nonvoid, FuncLoc)) &&
612
612
(!HasNoReturn ||
613
- D.isIgnored (diag::warn_noreturn_function_has_return_expr ,
613
+ D.isIgnored (diag::warn_noreturn_has_return_expr ,
614
614
FuncLoc)) &&
615
615
(!ReturnsVoid ||
616
616
D.isIgnored (diag::warn_suggest_noreturn_block, FuncLoc));
@@ -668,12 +668,12 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body,
668
668
if (CD.checkDiagnostics (Diags, ReturnsVoid, HasNoReturn))
669
669
return ;
670
670
SourceLocation LBrace = Body->getBeginLoc (), RBrace = Body->getEndLoc ();
671
- auto EmitDiag = [&](SourceLocation Loc, unsigned DiagID) {
671
+ auto EmitDiag = [&](SourceLocation Loc, unsigned DiagID, unsigned FunMode ) {
672
672
if (IsCoroutine) {
673
673
if (DiagID != 0 )
674
674
S.Diag (Loc, DiagID) << FSI->CoroutinePromise ->getType ();
675
675
} else {
676
- S.Diag (Loc, DiagID);
676
+ S.Diag (Loc, DiagID) << FunMode ;
677
677
}
678
678
};
679
679
@@ -688,13 +688,13 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body,
688
688
689
689
case MaybeFallThrough:
690
690
if (HasNoReturn)
691
- EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn );
691
+ EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn , CD. funMode );
692
692
else if (!ReturnsVoid)
693
693
S.Diag (RBrace, CD.diag_FallThrough_ReturnsNonVoid ) << CD.funMode << 1 ;
694
694
break ;
695
695
case AlwaysFallThrough:
696
696
if (HasNoReturn)
697
- EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn );
697
+ EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn , CD. funMode );
698
698
else if (!ReturnsVoid)
699
699
S.Diag (RBrace, CD.diag_FallThrough_ReturnsNonVoid ) << CD.funMode << 0 ;
700
700
break ;
0 commit comments