| // RUN: %check_clang_tidy %s bugprone-branch-clone %t -- -- -std=c++17 |
| |
| void handle(int); |
| |
| void testSwitchFallthroughAttribute(int value) { |
| switch(value) { |
| case 1: [[fallthrough]]; |
| case 2: [[fallthrough]]; |
| case 3: |
| handle(value); |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void testSwitchFallthroughAttributeAndBraces(int value) { |
| switch(value) { |
| case 1: { [[fallthrough]]; } |
| case 2: { [[fallthrough]]; } |
| case 3: { |
| handle(value); |
| break; |
| } |
| default: { |
| break; |
| } |
| } |
| } |
| |
| void testSwitchWithFallthroughAttributeAndCode(int value) { |
| switch(value) { |
| case 1: value += 1; [[fallthrough]]; |
| case 2: value += 1; [[fallthrough]]; |
| case 3: |
| handle(value); |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void testSwitchWithFallthroughAndCode(int value) { |
| switch(value) { |
| // CHECK-MESSAGES: :[[@LINE+1]]:5: warning: switch has 2 consecutive identical branches [bugprone-branch-clone] |
| case 1: value += 1; |
| case 2: value += 1; |
| // CHECK-MESSAGES: :[[@LINE-1]]:23: note: last of these clones ends here |
| case 3: |
| handle(value); |
| break; |
| default: |
| break; |
| } |
| } |
| |
| void testSwitchFallthroughAttributeIntoDefault(int value) { |
| switch(value) { |
| case 1: [[fallthrough]]; |
| case 2: [[fallthrough]]; |
| default: |
| handle(value); |
| break; |
| } |
| } |