1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough-per-function %s
2
3
fallthrough(int n)4 int fallthrough(int n) {
5 switch (n / 10) {
6 case 0:
7 n += 100;
8 case 1: // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
9 switch (n) {
10 case 111:
11 n += 111;
12 [[clang::fallthrough]];
13 case 112:
14 n += 112;
15 case 113: // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
16 n += 113;
17 break ;
18 }
19 }
20 return n;
21 }
22
fallthrough2(int n)23 int fallthrough2(int n) {
24 switch (n / 10) {
25 case 0:
26 n += 100;
27 case 1: // no warning, as we didn't "opt-in" for it in this method
28 switch (n) {
29 case 111:
30 n += 111;
31 case 112: // no warning, as we didn't "opt-in" for it in this method
32 n += 112;
33 case 113: // no warning, as we didn't "opt-in" for it in this method
34 n += 113;
35 break ;
36 }
37 }
38 return n;
39 }
40
unscoped(int n)41 void unscoped(int n) {
42 switch (n % 2) {
43 case 0:
44 [[fallthrough]];
45 case 2:
46 [[clang::fallthrough]];
47 case 1:
48 break;
49 }
50 }
51