@@ -544,24 +544,18 @@ static ControlFlowKind CheckFallThrough(AnalysisDeclContext &AC) {
544
544
namespace {
545
545
546
546
struct CheckFallThroughDiagnostics {
547
- unsigned diag_MaybeFallThrough_HasNoReturn;
548
- unsigned diag_MaybeFallThrough_ReturnsNonVoid;
549
- unsigned diag_AlwaysFallThrough_HasNoReturn;
550
- unsigned diag_AlwaysFallThrough_ReturnsNonVoid;
547
+ unsigned diag_FallThrough_HasNoReturn;
548
+ unsigned diag_FallThrough_ReturnsNonVoid;
551
549
unsigned diag_NeverFallThroughOrReturn;
552
550
enum { Function, Block, Lambda, Coroutine } funMode;
553
551
SourceLocation FuncLoc;
554
552
555
553
static CheckFallThroughDiagnostics MakeForFunction (const Decl *Func) {
556
554
CheckFallThroughDiagnostics D;
557
555
D.FuncLoc = Func->getLocation ();
558
- D.diag_MaybeFallThrough_HasNoReturn =
556
+ D.diag_FallThrough_HasNoReturn =
559
557
diag::warn_falloff_noreturn_function;
560
- D.diag_MaybeFallThrough_ReturnsNonVoid =
561
- diag::warn_maybe_falloff_nonvoid_function;
562
- D.diag_AlwaysFallThrough_HasNoReturn =
563
- diag::warn_falloff_noreturn_function;
564
- D.diag_AlwaysFallThrough_ReturnsNonVoid =
558
+ D.diag_FallThrough_ReturnsNonVoid =
565
559
diag::warn_falloff_nonvoid_function;
566
560
567
561
// Don't suggest that virtual functions be marked "noreturn", since they
@@ -588,11 +582,8 @@ struct CheckFallThroughDiagnostics {
588
582
static CheckFallThroughDiagnostics MakeForCoroutine (const Decl *Func) {
589
583
CheckFallThroughDiagnostics D;
590
584
D.FuncLoc = Func->getLocation ();
591
- D.diag_MaybeFallThrough_HasNoReturn = 0 ;
592
- D.diag_MaybeFallThrough_ReturnsNonVoid =
593
- diag::warn_maybe_falloff_nonvoid_coroutine;
594
- D.diag_AlwaysFallThrough_HasNoReturn = 0 ;
595
- D.diag_AlwaysFallThrough_ReturnsNonVoid =
585
+ D.diag_FallThrough_HasNoReturn = 0 ;
586
+ D.diag_FallThrough_ReturnsNonVoid =
596
587
diag::warn_falloff_nonvoid_coroutine;
597
588
D.diag_NeverFallThroughOrReturn = 0 ;
598
589
D.funMode = Coroutine;
@@ -601,13 +592,9 @@ struct CheckFallThroughDiagnostics {
601
592
602
593
static CheckFallThroughDiagnostics MakeForBlock () {
603
594
CheckFallThroughDiagnostics D;
604
- D.diag_MaybeFallThrough_HasNoReturn =
605
- diag::err_noreturn_block_has_return_expr;
606
- D.diag_MaybeFallThrough_ReturnsNonVoid =
607
- diag::err_maybe_falloff_nonvoid_block;
608
- D.diag_AlwaysFallThrough_HasNoReturn =
595
+ D.diag_FallThrough_HasNoReturn =
609
596
diag::err_noreturn_block_has_return_expr;
610
- D.diag_AlwaysFallThrough_ReturnsNonVoid =
597
+ D.diag_FallThrough_ReturnsNonVoid =
611
598
diag::err_falloff_nonvoid_block;
612
599
D.diag_NeverFallThroughOrReturn = 0 ;
613
600
D.funMode = Block;
@@ -616,13 +603,9 @@ struct CheckFallThroughDiagnostics {
616
603
617
604
static CheckFallThroughDiagnostics MakeForLambda () {
618
605
CheckFallThroughDiagnostics D;
619
- D.diag_MaybeFallThrough_HasNoReturn =
620
- diag::err_noreturn_lambda_has_return_expr;
621
- D.diag_MaybeFallThrough_ReturnsNonVoid =
622
- diag::warn_maybe_falloff_nonvoid_lambda;
623
- D.diag_AlwaysFallThrough_HasNoReturn =
606
+ D.diag_FallThrough_HasNoReturn =
624
607
diag::err_noreturn_lambda_has_return_expr;
625
- D.diag_AlwaysFallThrough_ReturnsNonVoid =
608
+ D.diag_FallThrough_ReturnsNonVoid =
626
609
diag::warn_falloff_nonvoid_lambda;
627
610
D.diag_NeverFallThroughOrReturn = 0 ;
628
611
D.funMode = Lambda;
@@ -633,7 +616,7 @@ struct CheckFallThroughDiagnostics {
633
616
bool HasNoReturn) const {
634
617
if (funMode == Function) {
635
618
return (ReturnsVoid ||
636
- D.isIgnored (diag::warn_maybe_falloff_nonvoid_function ,
619
+ D.isIgnored (diag::warn_falloff_nonvoid_function ,
637
620
FuncLoc)) &&
638
621
(!HasNoReturn ||
639
622
D.isIgnored (diag::warn_noreturn_function_has_return_expr,
@@ -643,8 +626,8 @@ struct CheckFallThroughDiagnostics {
643
626
}
644
627
if (funMode == Coroutine) {
645
628
return (ReturnsVoid ||
646
- D.isIgnored (diag::warn_maybe_falloff_nonvoid_function , FuncLoc) ||
647
- D.isIgnored (diag::warn_maybe_falloff_nonvoid_coroutine ,
629
+ D.isIgnored (diag::warn_falloff_nonvoid_function , FuncLoc) ||
630
+ D.isIgnored (diag::warn_falloff_nonvoid_coroutine ,
648
631
FuncLoc)) &&
649
632
(!HasNoReturn);
650
633
}
@@ -714,15 +697,15 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body,
714
697
715
698
case MaybeFallThrough:
716
699
if (HasNoReturn)
717
- EmitDiag (RBrace, CD.diag_MaybeFallThrough_HasNoReturn );
700
+ EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn );
718
701
else if (!ReturnsVoid)
719
- EmitDiag (RBrace, CD.diag_MaybeFallThrough_ReturnsNonVoid ) ;
702
+ S. Diag (RBrace, CD.diag_FallThrough_ReturnsNonVoid ) << 1 ;
720
703
break ;
721
704
case AlwaysFallThrough:
722
705
if (HasNoReturn)
723
- EmitDiag (RBrace, CD.diag_AlwaysFallThrough_HasNoReturn );
706
+ EmitDiag (RBrace, CD.diag_FallThrough_HasNoReturn );
724
707
else if (!ReturnsVoid)
725
- EmitDiag (RBrace, CD.diag_AlwaysFallThrough_ReturnsNonVoid ) ;
708
+ S. Diag (RBrace, CD.diag_FallThrough_ReturnsNonVoid ) << 0 ;
726
709
break ;
727
710
case NeverFallThroughOrReturn:
728
711
if (ReturnsVoid && !HasNoReturn && CD.diag_NeverFallThroughOrReturn ) {
0 commit comments