summaryrefslogtreecommitdiffstats
path: root/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaCXX/switch-implicit-fallthrough-per-method.cpp')
-rw-r--r--test/SemaCXX/switch-implicit-fallthrough-per-method.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp b/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp
new file mode 100644
index 0000000..7c52e51
--- /dev/null
+++ b/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp
@@ -0,0 +1,51 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough-per-function %s
+
+
+int fallthrough(int n) {
+ switch (n / 10) {
+ case 0:
+ n += 100;
+ case 1: // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
+ switch (n) {
+ case 111:
+ n += 111;
+ [[clang::fallthrough]];
+ case 112:
+ n += 112;
+ case 113: // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
+ n += 113;
+ break ;
+ }
+ }
+ return n;
+}
+
+int fallthrough2(int n) {
+ switch (n / 10) {
+ case 0:
+ n += 100;
+ case 1: // no warning, as we didn't "opt-in" for it in this method
+ switch (n) {
+ case 111:
+ n += 111;
+ case 112: // no warning, as we didn't "opt-in" for it in this method
+ n += 112;
+ case 113: // no warning, as we didn't "opt-in" for it in this method
+ n += 113;
+ break ;
+ }
+ }
+ return n;
+}
+
+void unscoped(int n) {
+ switch (n % 2) {
+ case 0:
+ // FIXME: This should be typo-corrected, probably.
+ [[fallthrough]];
+ case 2: // expected-warning{{unannotated fall-through}} expected-note{{clang::fallthrough}} expected-note{{break;}}
+ [[clang::fallthrough]];
+ case 1:
+ break;
+ }
+}
OpenPOWER on IntegriCloud