1*3c268af4SAkira Hatanaka // RUN: %clang_cc1 -fsyntax-only -verify -Wassign-enum -Wswitch-enum -Wcovered-switch-default -std=c++11 %s 2*3c268af4SAkira Hatanaka 3*3c268af4SAkira Hatanaka enum Enum { 4*3c268af4SAkira Hatanaka A0 = 1, A1 = 10 5*3c268af4SAkira Hatanaka }; 6*3c268af4SAkira Hatanaka 7*3c268af4SAkira Hatanaka enum __attribute__((enum_extensibility(closed))) EnumClosed { 8*3c268af4SAkira Hatanaka B0 = 1, B1 = 10 9*3c268af4SAkira Hatanaka }; 10*3c268af4SAkira Hatanaka 11*3c268af4SAkira Hatanaka enum [[clang::enum_extensibility(open)]] EnumOpen { 12*3c268af4SAkira Hatanaka C0 = 1, C1 = 10 13*3c268af4SAkira Hatanaka }; 14*3c268af4SAkira Hatanaka 15*3c268af4SAkira Hatanaka enum __attribute__((flag_enum)) EnumFlag { 16*3c268af4SAkira Hatanaka D0 = 1, D1 = 8 17*3c268af4SAkira Hatanaka }; 18*3c268af4SAkira Hatanaka 19*3c268af4SAkira Hatanaka enum __attribute__((flag_enum,enum_extensibility(closed))) EnumFlagClosed { 20*3c268af4SAkira Hatanaka E0 = 1, E1 = 8 21*3c268af4SAkira Hatanaka }; 22*3c268af4SAkira Hatanaka 23*3c268af4SAkira Hatanaka enum __attribute__((flag_enum,enum_extensibility(open))) EnumFlagOpen { 24*3c268af4SAkira Hatanaka F0 = 1, F1 = 8 25*3c268af4SAkira Hatanaka }; 26*3c268af4SAkira Hatanaka test()27*3c268af4SAkira Hatanakavoid test() { 28*3c268af4SAkira Hatanaka enum Enum t0; 29*3c268af4SAkira Hatanaka 30*3c268af4SAkira Hatanaka switch (t0) { // expected-warning{{enumeration value 'A1' not handled in switch}} 31*3c268af4SAkira Hatanaka case A0: break; 32*3c268af4SAkira Hatanaka case 16: break; // expected-warning{{case value not in enumerated type}} 33*3c268af4SAkira Hatanaka } 34*3c268af4SAkira Hatanaka 35*3c268af4SAkira Hatanaka switch (t0) { 36*3c268af4SAkira Hatanaka case A0: break; 37*3c268af4SAkira Hatanaka case A1: break; 38*3c268af4SAkira Hatanaka default: break; // expected-warning{{default label in switch which covers all enumeration}} 39*3c268af4SAkira Hatanaka } 40*3c268af4SAkira Hatanaka 41*3c268af4SAkira Hatanaka enum EnumClosed t1; 42*3c268af4SAkira Hatanaka 43*3c268af4SAkira Hatanaka switch (t1) { // expected-warning{{enumeration value 'B1' not handled in switch}} 44*3c268af4SAkira Hatanaka case B0: break; 45*3c268af4SAkira Hatanaka case 16: break; // expected-warning{{case value not in enumerated type}} 46*3c268af4SAkira Hatanaka } 47*3c268af4SAkira Hatanaka 48*3c268af4SAkira Hatanaka switch (t1) { 49*3c268af4SAkira Hatanaka case B0: break; 50*3c268af4SAkira Hatanaka case B1: break; 51*3c268af4SAkira Hatanaka default: break; // expected-warning{{default label in switch which covers all enumeration}} 52*3c268af4SAkira Hatanaka } 53*3c268af4SAkira Hatanaka 54*3c268af4SAkira Hatanaka enum EnumOpen t2; 55*3c268af4SAkira Hatanaka 56*3c268af4SAkira Hatanaka switch (t2) { // expected-warning{{enumeration value 'C1' not handled in switch}} 57*3c268af4SAkira Hatanaka case C0: break; 58*3c268af4SAkira Hatanaka case 16: break; 59*3c268af4SAkira Hatanaka } 60*3c268af4SAkira Hatanaka 61*3c268af4SAkira Hatanaka switch (t2) { 62*3c268af4SAkira Hatanaka case C0: break; 63*3c268af4SAkira Hatanaka case C1: break; 64*3c268af4SAkira Hatanaka default: break; 65*3c268af4SAkira Hatanaka } 66*3c268af4SAkira Hatanaka 67*3c268af4SAkira Hatanaka enum EnumFlag t3; 68*3c268af4SAkira Hatanaka 69*3c268af4SAkira Hatanaka switch (t3) { // expected-warning{{enumeration value 'D1' not handled in switch}} 70*3c268af4SAkira Hatanaka case D0: break; 71*3c268af4SAkira Hatanaka case 9: break; 72*3c268af4SAkira Hatanaka case 16: break; // expected-warning{{case value not in enumerated type}} 73*3c268af4SAkira Hatanaka } 74*3c268af4SAkira Hatanaka 75*3c268af4SAkira Hatanaka switch (t3) { 76*3c268af4SAkira Hatanaka case D0: break; 77*3c268af4SAkira Hatanaka case D1: break; 78*3c268af4SAkira Hatanaka default: break; 79*3c268af4SAkira Hatanaka } 80*3c268af4SAkira Hatanaka 81*3c268af4SAkira Hatanaka enum EnumFlagClosed t4; 82*3c268af4SAkira Hatanaka 83*3c268af4SAkira Hatanaka switch (t4) { // expected-warning{{enumeration value 'E1' not handled in switch}} 84*3c268af4SAkira Hatanaka case E0: break; 85*3c268af4SAkira Hatanaka case 9: break; 86*3c268af4SAkira Hatanaka case 16: break; // expected-warning{{case value not in enumerated type}} 87*3c268af4SAkira Hatanaka } 88*3c268af4SAkira Hatanaka 89*3c268af4SAkira Hatanaka switch (t4) { 90*3c268af4SAkira Hatanaka case E0: break; 91*3c268af4SAkira Hatanaka case E1: break; 92*3c268af4SAkira Hatanaka default: break; 93*3c268af4SAkira Hatanaka } 94*3c268af4SAkira Hatanaka 95*3c268af4SAkira Hatanaka enum EnumFlagOpen t5; 96*3c268af4SAkira Hatanaka 97*3c268af4SAkira Hatanaka switch (t5) { // expected-warning{{enumeration value 'F1' not handled in switch}} 98*3c268af4SAkira Hatanaka case F0: break; 99*3c268af4SAkira Hatanaka case 9: break; 100*3c268af4SAkira Hatanaka case 16: break; 101*3c268af4SAkira Hatanaka } 102*3c268af4SAkira Hatanaka 103*3c268af4SAkira Hatanaka switch (t5) { 104*3c268af4SAkira Hatanaka case F0: break; 105*3c268af4SAkira Hatanaka case F1: break; 106*3c268af4SAkira Hatanaka default: break; 107*3c268af4SAkira Hatanaka } 108*3c268af4SAkira Hatanaka } 109