@@ -946,29 +946,30 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
946946 PreviousFallthrough = S;
947947 return S;
948948 }
949-
950- Stmt *visitSwitchStmt (SwitchStmt *S ) {
949+
950+ Stmt *visitSwitchStmt (SwitchStmt *switchStmt ) {
951951 // Type-check the subject expression.
952- Expr *subjectExpr = S ->getSubjectExpr ();
952+ Expr *subjectExpr = switchStmt ->getSubjectExpr ();
953953 auto resultTy = TC.typeCheckExpression (subjectExpr, DC);
954954 auto limitExhaustivityChecks = !resultTy;
955955 if (Expr *newSubjectExpr = TC.coerceToRValue (subjectExpr))
956956 subjectExpr = newSubjectExpr;
957- S ->setSubjectExpr (subjectExpr);
958- Type subjectType = S ->getSubjectExpr ()->getType ();
957+ switchStmt ->setSubjectExpr (subjectExpr);
958+ Type subjectType = switchStmt ->getSubjectExpr ()->getType ();
959959
960960 // Type-check the case blocks.
961961 AddSwitchNest switchNest (*this );
962- AddLabeledStmt labelNest (*this , S );
962+ AddLabeledStmt labelNest (*this , switchStmt );
963963
964964 // Pre-emptively visit all Decls (#if/#warning/#error) that still exist in
965965 // the list of raw cases.
966- for (auto node : S->getRawCases ()) {
967- if (!node.is <Decl*>()) continue ;
968- TC.typeCheckDecl (node.get <Decl*>());
966+ for (auto &node : switchStmt->getRawCases ()) {
967+ if (!node.is <Decl *>())
968+ continue ;
969+ TC.typeCheckDecl (node.get <Decl *>());
969970 }
970971
971- auto cases = S ->getCases ();
972+ auto cases = switchStmt ->getCases ();
972973 CaseStmt *previousBlock = nullptr ;
973974 for (auto i = cases.begin (), e = cases.end (); i != e; ++i) {
974975 auto *caseBlock = *i;
@@ -1000,36 +1001,39 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
10001001
10011002 // For each variable in the pattern, make sure its type is identical to what it
10021003 // was in the first label item's pattern.
1003- auto firstPattern = caseBlock->getCaseLabelItems ()[0 ].getPattern ();
1004+ auto * firstPattern = caseBlock->getCaseLabelItems ()[0 ].getPattern ();
10041005 SmallVector<VarDecl *, 4 > vars;
10051006 firstPattern->collectVariables (vars);
1006- pattern->forEachVariable ([&](VarDecl *VD ) {
1007- if (!VD ->hasName ())
1007+ pattern->forEachVariable ([&](VarDecl *vd ) {
1008+ if (!vd ->hasName ())
10081009 return ;
10091010 for (auto *expected : vars) {
1010- if (expected->hasName () && expected->getName () == VD->getName ()) {
1011- if (VD->hasType () && expected->hasType () && !expected->isInvalid () &&
1012- !VD->getType ()->isEqual (expected->getType ())) {
1013- TC.diagnose (VD->getLoc (), diag::type_mismatch_multiple_pattern_list,
1014- VD->getType (), expected->getType ());
1015- VD->markInvalid ();
1011+ if (expected->hasName () && expected->getName () == vd->getName ()) {
1012+ if (vd->hasType () && expected->hasType () &&
1013+ !expected->isInvalid () &&
1014+ !vd->getType ()->isEqual (expected->getType ())) {
1015+ TC.diagnose (vd->getLoc (),
1016+ diag::type_mismatch_multiple_pattern_list,
1017+ vd->getType (), expected->getType ());
1018+ vd->markInvalid ();
10161019 expected->markInvalid ();
10171020 }
1018- if (expected->isLet () != VD->isLet ()) {
1019- auto diag = TC.diagnose (VD->getLoc (),
1020- diag::mutability_mismatch_multiple_pattern_list,
1021- VD->isLet (), expected->isLet ());
1021+ if (expected->isLet () != vd->isLet ()) {
1022+ auto diag = TC.diagnose (
1023+ vd->getLoc (),
1024+ diag::mutability_mismatch_multiple_pattern_list,
1025+ vd->isLet (), expected->isLet ());
10221026
10231027 VarPattern *foundVP = nullptr ;
1024- VD ->getParentPattern ()->forEachNode ([&](Pattern *P) {
1028+ vd ->getParentPattern ()->forEachNode ([&](Pattern *P) {
10251029 if (auto *VP = dyn_cast<VarPattern>(P))
1026- if (VP->getSingleVar () == VD )
1030+ if (VP->getSingleVar () == vd )
10271031 foundVP = VP;
10281032 });
10291033 if (foundVP)
10301034 diag.fixItReplace (foundVP->getLoc (),
10311035 expected->isLet () ? " let" : " var" );
1032- VD ->markInvalid ();
1036+ vd ->markInvalid ();
10331037 expected->markInvalid ();
10341038 }
10351039 return ;
@@ -1061,7 +1065,7 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
10611065 limitExhaustivityChecks = true ;
10621066 }
10631067
1064- const CaseLabelItem &labelItem = caseBlock->getCaseLabelItems ().front ();
1068+ const auto &labelItem = caseBlock->getCaseLabelItems ().front ();
10651069 if (labelItem.getGuardExpr () && !labelItem.isDefault ()) {
10661070 TC.diagnose (labelItem.getStartLoc (),
10671071 diag::unknown_case_where_clause)
@@ -1081,14 +1085,14 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
10811085 // includes our first label item's pattern bindings and types.
10821086 if (PreviousFallthrough && previousBlock) {
10831087 auto firstPattern = caseBlock->getCaseLabelItems ()[0 ].getPattern ();
1084- SmallVector<VarDecl *, 4 > Vars ;
1085- firstPattern->collectVariables (Vars );
1088+ SmallVector<VarDecl *, 4 > vars ;
1089+ firstPattern->collectVariables (vars );
10861090
10871091 for (auto &labelItem : previousBlock->getCaseLabelItems ()) {
10881092 const Pattern *pattern = labelItem.getPattern ();
10891093 SmallVector<VarDecl *, 4 > PreviousVars;
10901094 pattern->collectVariables (PreviousVars);
1091- for (auto expected : Vars ) {
1095+ for (auto expected : vars ) {
10921096 bool matched = false ;
10931097 if (!expected->hasName ())
10941098 continue ;
@@ -1120,11 +1124,11 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
11201124 previousBlock = caseBlock;
11211125 }
11221126
1123- if (!S ->isImplicit ()) {
1124- TC.checkSwitchExhaustiveness (S , DC, limitExhaustivityChecks);
1127+ if (!switchStmt ->isImplicit ()) {
1128+ TC.checkSwitchExhaustiveness (switchStmt , DC, limitExhaustivityChecks);
11251129 }
11261130
1127- return S ;
1131+ return switchStmt ;
11281132 }
11291133
11301134 Stmt *visitCaseStmt (CaseStmt *S) {
0 commit comments