Every non-empty clause in a switch statement shall be terminated with a break statement
// LabeledStmt [ Label::CaseLabel | Label::CaseRangeLabel | Label::DefaultLabel ][ not parent::LabeledStmt [ Label::CaseLabel | Label::CaseRangeLabel | Label::DefaultLabel ] ][ Stmt::CompoundStmt [ not descendant::BreakStmt ][ not descendant::ThrowExpr ][ not descendant::ReturnStmt ]| Stmt::LabeledStmt [ not Stmt::Null ][ not descendant::BreakStmt ][ not descendant::ThrowExpr ][ not descendant::ReturnStmt ]| Stmt::* [ name() != 'CompoundStmt' ][ name() != 'BreakStmt' ][ name() != 'ReturnStmt' ][ name() != 'LabeledStmt' ][ not descendant::ThrowExpr ]| Stmt::Null][ next-sibling:: { * [ name() != 'BreakStmt' ][ name() != 'ReturnStmt' ][ not descendant::ThrowExpr ]/ next-sibling:: } LabeledStmt [ Label::CaseLabel | Label::CaseRangeLabel | Label::DefaultLabel ]| next-sibling:: { * [ name() != 'BreakStmt' ][ name() != 'ReturnStmt' ][ not descendant::ThrowExpr ]/ next-sibling:: } Null]
1 void test193() 2 { 3 int x = 0; 4 switch (x) 5 { 6 case 0: 7 break; 8 9 case 1: 10 11 case 2: 12 break; 13 14 case 3: 15 4+5; // MATCHES 16 17 default: 18 // MATCHES 19 } 20 switch (x) 21 { 22 case 0: 23 break; 24 25 case 1: 26 27 case 2: 28 break; 29 30 case 4: 31 x = 0; 32 break; 33 34 default: 35 break; 36 } 37 int i=0; 38 switch(i) 39 { 40 case 0 : 41 i++; // MATCHES 42 43 case 1 : 44 i++; 45 break; 46 47 case 3 : 48 49 case 4 : 50 break; 51 52 case 5: 53 i++; // MATCHES 54 55 case 8:{ 56 i++; // MATCHES 57 } 58 59 case 9:{ 60 } // MATCHES 61 62 default:{ 63 } // MATCHES 64 } 65 }