switch-implicit-fallthrough.cpp revision 878d0ad2c9d83ee6485fd16e21c5082acc63a890
1e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough %s 2e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 3e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 4e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithint fallthrough(int n) { 5e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n / 10) { 6e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n - 1) { 7e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n = 100; 8e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else if (n - 2) { 9e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n = 101; 10e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else if (n - 3) { 11e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n = 102; 12e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 134874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko case -1: // no warning here, ignore fall-through from unreachable code 14e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith ; 15e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 0: {// expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 16e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 17e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 1: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 18e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 100 ; 19e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 3: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 20e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n > 0) 21e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 200; 22e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 4: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 23e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n < 0) 24e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith ; 25e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 5: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 26e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n) { 27e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 111: 28e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 29e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 112: 30e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 31e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 113: 32e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break ; 33e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 34e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 6: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 35e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 300; 36a189d8976f1193b788508a1a29b2e9d0aca06acaAlexander Kornienko case 66: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert 'break;' to avoid fall-through}} 37e992ed1a065d857947b3969e6b779c41cc35c234Alexander Kornienko case 67: 38e992ed1a065d857947b3969e6b779c41cc35c234Alexander Kornienko case 68: 39a189d8976f1193b788508a1a29b2e9d0aca06acaAlexander Kornienko break; 40e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 41c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko switch (n / 15) { 424874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienkolabel_default: 434874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko default: 44c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko n += 333; 454874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko if (n % 10) 464874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko goto label_default; 47c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko break; 484874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko case 70: 49c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko n += 335; 50c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko break; 51c6dcea93b499b504da22f9921fc198423ad0b13bAlexander Kornienko } 52e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n / 20) { 53e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 7: 54e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 400; 55e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; 56e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 9: // no warning here, intended fall-through marked with an attribute 57e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 800; 58e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; 59e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith default: { // no warning here, intended fall-through marked with an attribute 60e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n % 2 == 0) { 61e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 1; 62e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else { 63e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; 64e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 65e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 66e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 10: // no warning here, intended fall-through marked with an attribute 67e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n % 3 == 0) { 68e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n %= 3; 69e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else { 70e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; 71e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 72e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 110: // expected-warning{{unannotated fall-through between switch labels}} but no fix-it hint as we have one fall-through annotation! 73e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 800; 74e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 75e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n / 30) { 76e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 11: 77e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 12: // no warning here, intended fall-through, no statement between labels 78e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 1600; 79e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 80e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n / 40) { 81e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 13: 82e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n % 2 == 0) { 83e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 1; 84e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else { 85e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 2; 86e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 87e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 15: // no warning here, there's no fall-through 88e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 3200; 89e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 90e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n / 50) { 91e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 17: { 92e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith if (n % 2 == 0) { 93e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 1; 94e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } else { 95e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 2; 96e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 97e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 98e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 19: { // no warning here, there's no fall-through 99e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 6400; 100e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 3; 101e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 102e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 21: { // no warning here, there's no fall-through 103e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 104e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 105e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 23: // no warning here, there's no fall-through 106e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 128000; 107e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 108e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 25: // no warning here, there's no fall-through 109e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 110e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 111e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 112e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return n; 113e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith} 114e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 115e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithclass ClassWithDtor { 116e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithpublic: 117e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith ~ClassWithDtor() {} 118e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith}; 119e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 120e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithvoid fallthrough2(int n) { 121e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n) { 122e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 0: 123e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith { 124e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith ClassWithDtor temp; 125e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 126e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 127e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith default: // no warning here, there's no fall-through 128e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 129e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 130e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith} 131e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 1324874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienkovoid fallthrough3(int n) { 1334874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko switch (n) { 1344874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko case 1: 1354874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko do { 1364874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko return; 1374874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko } while (0); 1384874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko case 2: 1394874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko do { 1404874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko ClassWithDtor temp; 1414874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko return; 1424874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko } while (0); 1434874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko case 3: 1444874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko break; 1454874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko } 1464874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko} 1474874a8143dc3032205f97527ff619730db3d1f57Alexander Kornienko 148e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith#define MY_SWITCH(X, Y, Z, U, V) switch (X) { case Y: Z; case U: V; } 149e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith#define MY_SWITCH2(X, Y, Z) switch (X) { Y; Z; } 150e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith#define MY_CASE(X, Y) case X: Y 151e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith#define MY_CASE2(X, Y, U, V) case X: Y; case U: V 152e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 153e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithint fallthrough_macro1(int n) { 154e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_SWITCH(n, 13, n *= 2, 14, break) // expected-warning{{unannotated fall-through between switch labels}} 155e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 156e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n + 1) { 157e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE(33, n += 2); 158e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE(44, break); // expected-warning{{unannotated fall-through between switch labels}} 159e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE(55, n += 3); 160e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 161e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 162e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n + 3) { 163e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE(333, return 333); 164e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE2(444, n += 44, 4444, break); // expected-warning{{unannotated fall-through between switch labels}} 165e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_CASE(555, n += 33); 166e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 167e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 168e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_SWITCH2(n + 4, MY_CASE(17, n *= 3), MY_CASE(19, break)) // expected-warning{{unannotated fall-through between switch labels}} 169e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 170e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith MY_SWITCH2(n + 5, MY_CASE(21, break), MY_CASE2(23, n *= 7, 25, break)) // expected-warning{{unannotated fall-through between switch labels}} 171e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 172e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return n; 173e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith} 174e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 1750162b832fd6450cd3a23019a3c900382d0e9415cAlexander Kornienkovoid fallthrough_cfgblock_with_null_successor(int x) { 1760162b832fd6450cd3a23019a3c900382d0e9415cAlexander Kornienko (x && "") ? (void)(0) : (void)(1); 1770162b832fd6450cd3a23019a3c900382d0e9415cAlexander Kornienko switch (x) {} 1780162b832fd6450cd3a23019a3c900382d0e9415cAlexander Kornienko} 1790162b832fd6450cd3a23019a3c900382d0e9415cAlexander Kornienko 180e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithint fallthrough_position(int n) { 181e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n) { 182878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko [[clang::fallthrough]]; // expected-warning{{fallthrough annotation does not directly precede switch label}} 183878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko n += 300; 184e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; // expected-warning{{fallthrough annotation in unreachable code}} 185e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 221: 186878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko [[clang::fallthrough]]; // expected-warning{{fallthrough annotation does not directly precede switch label}} 187e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return 1; 188e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; // expected-warning{{fallthrough annotation in unreachable code}} 189e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 222: 190878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko [[clang::fallthrough]]; // expected-warning{{fallthrough annotation does not directly precede switch label}} 191e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 400; 192e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 223: // expected-warning{{unannotated fall-through between switch labels}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}} 193e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; // expected-warning{{fallthrough annotation does not directly precede switch label}} 194e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 19586197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko 19686197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko long p = static_cast<long>(n) * n; 19786197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko switch (sizeof(p)) { 198878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko case 9: 19986197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko n += static_cast<int>(p >> 32); 20086197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko [[clang::fallthrough]]; // no warning here 201878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko case 5: 20286197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko n += static_cast<int>(p); 203878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko [[clang::fallthrough]]; // no warning here 20486197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko default: 205878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko n += 1; 206878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko break; 20786197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko } 20886197b311ddb938c9605fdc3e4e57157c4cfe9bdAlexander Kornienko 209e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return n; 210e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith} 211e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 212878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienkoenum Enum { 213878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko Value1, Value2 214878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko}; 215878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko 216878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienkoint fallthrough_covered_enums(Enum e) { 217878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko int n = 0; 218878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko switch (e) { 219878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko default: 220878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko n += 17; 221878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko [[clang::fallthrough]]; // no warning here, this shouldn't be treated as unreachable code 222878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko case Value1: 223878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko n += 19; 224878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko break; 225878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko case Value2: 226878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko n += 21; 227878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko break; 228878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko } 229878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko return n; 230878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko} 231878d0ad2c9d83ee6485fd16e21c5082acc63a890Alexander Kornienko 232e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smithint fallthrough_targets(int n) { 233e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; // expected-error{{fallthrough annotation is outside switch statement}} 234e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith 235e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]] // expected-error{{fallthrough attribute is only allowed on empty statements}} 236e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith switch (n) { 237e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 121: 238e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 400; 239e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]]; // no warning here, correct target 240e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 123: 241e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]] // expected-error{{fallthrough attribute is only allowed on empty statements}} 242e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 800; 243e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith break; 244e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith [[clang::fallthrough]] // expected-error{{fallthrough attribute is only allowed on empty statements}} expected-note{{did you forget ';'?}} 245e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith case 125: 246e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith n += 1600; 247e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith } 248e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith return n; 249e0d3b4cd2b66f1cef26cacbed5820ab7c22ad5b3Richard Smith} 250