1c2f51cfefd77e9b25f201ecf879343d6d9a45158Sean Hunt// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough-per-function %s
21973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko
31973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko
41973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienkoint fallthrough(int n) {
51973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  switch (n / 10) {
61973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko    case 0:
71973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      n += 100;
8c2f51cfefd77e9b25f201ecf879343d6d9a45158Sean Hunt    case 1:  // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
91973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      switch (n) {
101973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      case 111:
111973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 111;
121973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        [[clang::fallthrough]];
131973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      case 112:
141973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 112;
15c2f51cfefd77e9b25f201ecf879343d6d9a45158Sean Hunt      case 113:  // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
161973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 113;
171973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        break    ;
181973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      }
191973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  }
201973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  return n;
211973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko}
221973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko
231973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienkoint fallthrough2(int n) {
241973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  switch (n / 10) {
251973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko    case 0:
261973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      n += 100;
271973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko    case 1:  // no warning, as we didn't "opt-in" for it in this method
281973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      switch (n) {
291973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      case 111:
301973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 111;
311973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      case 112:  // no warning, as we didn't "opt-in" for it in this method
321973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 112;
331973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      case 113:  // no warning, as we didn't "opt-in" for it in this method
341973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        n += 113;
351973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko        break    ;
361973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko      }
371973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  }
381973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko  return n;
391973634e445d4f1abdeedc2809f2d281929253b6Alexander Kornienko}
4093f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt
4193f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Huntvoid unscoped(int n) {
4293f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt  switch (n % 2) {
4393f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt    case 0:
4493f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt      // FIXME: This should be typo-corrected, probably.
4593f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt      [[fallthrough]];
4693f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt    case 2: // expected-warning{{unannotated fall-through}} expected-note{{clang::fallthrough}} expected-note{{break;}}
4793f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt      [[clang::fallthrough]];
4893f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt    case 1:
4993f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt      break;
5093f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt  }
5193f95f2a2cbb6bb3d17bfb5fc74ce1cccea751b6Sean Hunt}
52