11a2b8e27135ec72f183dd4510612f6d5d7ee088aTed Kremenek// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default %s 28a87e57beb96212ee61dc08a5f691cd7f7710703Chris Lattnervoid f (int z) { 38a87e57beb96212ee61dc08a5f691cd7f7710703Chris Lattner while (z) { 40471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner default: z--; // expected-error {{statement not in switch}} 58a87e57beb96212ee61dc08a5f691cd7f7710703Chris Lattner } 68a87e57beb96212ee61dc08a5f691cd7f7710703Chris Lattner} 78a87e57beb96212ee61dc08a5f691cd7f7710703Chris Lattner 8f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattnervoid foo(int X) { 9f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattner switch (X) { 105f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner case 42: ; // expected-note {{previous case}} 110471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner case 5000000000LL: // expected-warning {{overflow}} 123940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case 42: // expected-error {{duplicate case value '42'}} 13f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattner ; 146efc4d3659632ddcea4a58cb62e9ee54ca4a373eChris Lattner 150471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner case 100 ... 99: ; // expected-warning {{empty case range}} 160471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner 175f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner case 43: ; // expected-note {{previous case}} 180471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner case 43 ... 45: ; // expected-error {{duplicate case value}} 190471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner 205f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner case 100 ... 20000:; // expected-note {{previous case}} 210471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner case 15000 ... 40000000:; // expected-error {{duplicate case value}} 22f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattner } 23f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattner} 24f4021e7d5228a2be5a380269dffa0331a6c78b95Chris Lattner 25f334850cd2fc2d4ac9b585f80d97b4f0097a0348Chris Lattnervoid test3(void) { 260471f5bc8191e39cdb61fabcaf1870e2af2d42e8Chris Lattner // empty switch; 27625bb569df0c34feec0d52c0ec5215f21ef2e054Dmitri Gribenko switch (0); // expected-warning {{no case matching constant switch condition '0'}} \ 28625bb569df0c34feec0d52c0ec5215f21ef2e054Dmitri Gribenko // expected-warning {{switch statement has empty body}} \ 29625bb569df0c34feec0d52c0ec5215f21ef2e054Dmitri Gribenko // expected-note{{put the semicolon on a separate line to silence this warning}} 30f334850cd2fc2d4ac9b585f80d97b4f0097a0348Chris Lattner} 31f334850cd2fc2d4ac9b585f80d97b4f0097a0348Chris Lattner 3251fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlssonextern int g(); 3351fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson 3451fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlssonvoid test4() 3551fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson{ 360fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall int cond; 370fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (cond) { 3851fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson case 0 && g(): 3951fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson case 1 || g(): 4051fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson break; 4151fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson } 4251fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson 430fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch(cond) { 44d3a61d5ec5357d19b7c0b6b599231e68dc5e237fAnders Carlsson case g(): // expected-error {{expression is not an integer constant expression}} 45d3a61d5ec5357d19b7c0b6b599231e68dc5e237fAnders Carlsson case 0 ... g(): // expected-error {{expression is not an integer constant expression}} 4651fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson break; 4751fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson } 4851fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson 490fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (cond) { 5051fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson case 0 && g() ... 1 || g(): 5151fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson break; 5251fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson } 536dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson 540fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (cond) { 55282e7e66748cc6dd14d6f7f2cb52e5373c531e61Richard Smith case g() // expected-error {{expression is not an integer constant expression}} 56282e7e66748cc6dd14d6f7f2cb52e5373c531e61Richard Smith && 0: 576dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson break; 586dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson } 596dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson 600fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (cond) { 61282e7e66748cc6dd14d6f7f2cb52e5373c531e61Richard Smith case 0 ... 62282e7e66748cc6dd14d6f7f2cb52e5373c531e61Richard Smith g() // expected-error {{expression is not an integer constant expression}} 63282e7e66748cc6dd14d6f7f2cb52e5373c531e61Richard Smith || 1: 646dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson break; 656dde0d5dc09f45f4d9508c964703e36fef1a0198Anders Carlsson } 6651fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson} 6751fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson 685f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattnervoid test5(int z) { 695f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner switch(z) { 705f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner default: // expected-note {{previous case defined here}} 715f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner default: // expected-error {{multiple default labels in one switch}} 725f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner break; 735f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner } 745f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner} 755f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattner 765f04881eb025f61396d0555d8173730fe2759e0aChris Lattnervoid test6() { 770fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall char ch = 'a'; 785f04881eb025f61396d0555d8173730fe2759e0aChris Lattner switch(ch) { 795f04881eb025f61396d0555d8173730fe2759e0aChris Lattner case 1234: // expected-warning {{overflow converting case value}} 805f04881eb025f61396d0555d8173730fe2759e0aChris Lattner break; 815f04881eb025f61396d0555d8173730fe2759e0aChris Lattner } 825f04881eb025f61396d0555d8173730fe2759e0aChris Lattner} 83be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor 84be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor// PR5606 85e24b575f06985336973bb721e198bd184bf7bdd3Douglas Gregorint f0(int var) { 86be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor switch (va) { // expected-error{{use of undeclared identifier 'va'}} 87be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor case 1: 88be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor break; 89be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor case 2: 90be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor return 1; 91be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor } 92be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor return 2; 93be724bab2ba7ad47aebced25e7c8ec551eb72d28Douglas Gregor} 94ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 95ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test7() { 96ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 97ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A = 1, 98ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor B 99ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 100ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}} 101ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 102ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 103ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 104ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 105ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 106ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 107ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 108ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 109ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 110ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 111ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 11254faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 3: // expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 113ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 114ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 115ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 116ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 117ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 11854faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 3 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 11954faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 120ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 121ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 122ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 123ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case 1 ... 2: 124ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 125ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 126ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 12754faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 0 ... 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 128ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 129ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 130ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 13154faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 1 ... 3: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 132ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 133ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 134ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 13554faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 0 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 13654faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 3: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 137ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 138ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 139ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 140ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 141ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 142ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test8() { 143ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 144ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A, 145ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor B, 146ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor C = 1 147ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 148ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 149ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 150ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 151ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 152ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 153ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 154ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 155ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case C: 156ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 157ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 158ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}} 159ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 160ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 161ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 162ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 163ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 164ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test9() { 165ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 166ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A = 3, 167ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor C = 1 168ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 169ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 17054faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 0: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 171ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case 1: 17254faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 173ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case 3: 17454faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 175ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 176ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 177ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 178ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 179ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test10() { 180ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 181ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A = 10, 182ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor C = 2, 183ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor B = 4, 184ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor D = 12 185ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 186ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 18754faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 0 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 18854faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 1: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 189ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case 2 ... 4: 19054faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 5 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 19154faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 9: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 192ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case 10 ... 12: 19354faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 13 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 19454faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 16: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}} 195ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 196ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 197ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 198ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 199ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test11() { 200ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 201ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A = -1, 202ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor B, 203ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor C 204ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 205ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { //expected-warning{{enumeration value 'A' not handled in switch}} 206ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 207ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case C: 208ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 209ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 210ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 211e1d82deb6839bf972aa6301da40f06e8926f0af5David Blaikie switch(a) { //expected-warning{{enumeration value 'A' not explicitly handled in switch}} 212ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 213ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case C: 214ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 215ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 216ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor default: 217ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 218ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 219ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 220ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor 221ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregorvoid test12() { 222ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor enum { 223ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor A = -1, 224ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor B = 4294967286 225ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } a; 226ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor switch(a) { 227ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case A: 228ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor case B: 229ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor break; 230ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor } 231ba915af51ced751c46e7c2b9c6f3b59d2e668825Douglas Gregor} 23230ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor 23330ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor// <rdar://problem/7643909> 23430ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregortypedef enum { 23530ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor val1, 23630ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor val2, 23730ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor val3 23830ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor} my_type_t; 23930ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor 24030ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregorint test13(my_type_t t) { 24130ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor switch(t) { // expected-warning{{enumeration value 'val3' not handled in switch}} 24230ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor case val1: 24330ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor return 1; 24430ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor case val2: 24530ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor return 2; 24630ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor } 24730ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor return -1; 24830ab37122300a5f6664b8ae2d0b43b4396eb6bcbDouglas Gregor} 2492853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor 2502853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor// <rdar://problem/7658121> 2512853eac24e2e70a74d7da817653b0528b976039fDouglas Gregorenum { 2522853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor EC0 = 0xFFFF0000, 2532853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor EC1 = 0xFFFF0001, 2542853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor}; 2552853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor 2562853eac24e2e70a74d7da817653b0528b976039fDouglas Gregorint test14(int a) { 2572853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor switch(a) { 2582853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor case EC0: return 0; 2592853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor case EC1: return 1; 2602853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor } 2612853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor return 0; 2622853eac24e2e70a74d7da817653b0528b976039fDouglas Gregor} 263f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor 264f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregorvoid f1(unsigned x) { 265f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor switch (x) { 266f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor case -1: break; 267f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor default: break; 268f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor } 269f9f627dbbc62fbf51b906c24c783b4249dc7e9bbDouglas Gregor} 2700fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall 2710fb97083cc0f8a82e404e22991ae80d2216e71d5John McCallvoid test15() { 2720fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall int i = 0; 2730fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (1) { // expected-warning {{no case matching constant switch condition '1'}} 2740fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall case 0: i = 0; break; 2750fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall case 2: i++; break; 2760fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall } 2770fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall} 2780fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall 2790fb97083cc0f8a82e404e22991ae80d2216e71d5John McCallvoid test16() { 2800fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall const char c = '5'; 2810fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall switch (c) { // expected-warning {{no case matching constant switch condition '53'}} 2820fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall case '6': return; 2830fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall } 2840fb97083cc0f8a82e404e22991ae80d2216e71d5John McCall} 2856907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall 2866907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall// PR7359 2876907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCallvoid test17(int x) { 2886907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall switch (x >= 17) { // expected-warning {{switch condition has boolean value}} 2896907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall case 0: return; 2906907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall } 2916907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall 2926907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall switch ((int) (x <= 17)) { 2936907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall case 0: return; 2946907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall } 2956907fbe758d23e1aec4c0a67e7b633d1d855feb4John McCall} 29631ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikie 29731ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikieint test18() { 29831ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikie enum { A, B } a; 29931ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikie switch (a) { 30031ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikie case A: return 0; 30131ceb61172bca7ebc3fb90e9125864c7a29c55c0David Blaikie case B: return 1; 3029366750a5a97c8aeae1df4898ea849b087865195David Blaikie case 7: return 1; // expected-warning {{case value not in enumerated type}} 3032dd52e3815d040e340a5d953d838cd2268e25372David Blaikie default: return 2; // expected-warning {{default label in switch which covers all enumeration values}} 3049366750a5a97c8aeae1df4898ea849b087865195David Blaikie } 3059366750a5a97c8aeae1df4898ea849b087865195David Blaikie} 30654faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 30754faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian// rdar://110822110 30854faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahaniantypedef enum { 30954faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian kOne = 1, 31054faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian} Ints; 31154faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian 31254faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanianvoid rdar110822110(Ints i) 31354faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian{ 31454faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian switch (i) { 31554faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case kOne: 31654faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian break; 31754faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian case 2: // expected-warning {{case value not in enumerated type 'Ints'}} 31854faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian break; 31954faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian default: // expected-warning {{default label in switch which covers all enumeration values}} 32054faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian break; 32154faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian } 32254faba4f7f3f0e8f1376da1c459312596ad5486dFariborz Jahanian} 3233940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor 3243940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor// PR9243 3253940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor#define TEST19MACRO 5 3263940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregorvoid test19(int i) { 3273940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor enum { 3283940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor kTest19Enum1 = 7, 3297af7de7d6b121132dfe8c3b9b5febe2b37aafd62Richard Trieu kTest19Enum2 = kTest19Enum1 3303940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor }; 3313940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor const int a = 3; 3323940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor switch (i) { 3333940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case 5: // expected-note {{previous case}} 3343940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case TEST19MACRO: // expected-error {{duplicate case value '5'}} 3353940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor 3363940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case 7: // expected-note {{previous case}} 3373940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case kTest19Enum1: // expected-error {{duplicate case value: '7' and 'kTest19Enum1' both equal '7'}} \ 3383940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor // expected-note {{previous case}} 3393940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case kTest19Enum1: // expected-error {{duplicate case value 'kTest19Enum1'}} \ 3403940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor // expected-note {{previous case}} 3413940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case kTest19Enum2: // expected-error {{duplicate case value: 'kTest19Enum1' and 'kTest19Enum2' both equal '7'}} \ 3423940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor // expected-note {{previous case}} 3433940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case (int)kTest19Enum2: //expected-error {{duplicate case value 'kTest19Enum2'}} 3443940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor 3453940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case 3: // expected-note {{previous case}} 3463940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case a: // expected-error {{duplicate case value: '3' and 'a' both equal '3'}} \ 3473940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor // expected-note {{previous case}} 3483940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor case a: // expected-error {{duplicate case value 'a'}} 3493940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor break; 3503940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor } 3513940ce83438e2332ba541f4e65e700fbefe0c7a8Douglas Gregor} 352