1379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian// RUN: %clang_cc1 -fsyntax-only -verify -Wassign-enum %s 2379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian// rdar://11824807 3379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 4379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahaniantypedef enum CCTestEnum 5379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian{ 6379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian One, 7379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian Two=4, 8379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian Three 9379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian} CCTestEnum; 10379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 11379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz JahanianCCTestEnum test = 50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 12379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz JahanianCCTestEnum test1 = -50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 13379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Explicit cast should silence the warning. 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic const CCTestEnum SilenceWithCast1 = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic const CCTestEnum SilenceWithCast2 = (CCTestEnum) 51; // no-warning 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic const CCTestEnum SilenceWithCast3 = (const CCTestEnum) 51; // no-warning 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic const CCTestEnum SilenceWithCast4 = (const volatile CCTestEnum) 51; // no-warning 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid SilenceWithCastLocalVar() { 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CCTestEnum SilenceWithCast1 = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CCTestEnum SilenceWithCast2 = (CCTestEnum) 51; // no-warning 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CCTestEnum SilenceWithCast3 = (const CCTestEnum) 51; // no-warning 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CCTestEnum SilenceWithCast4 = (const volatile CCTestEnum) 51; // no-warning 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const CCTestEnum SilenceWithCast1c = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const CCTestEnum SilenceWithCast2c = (CCTestEnum) 51; // no-warning 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const CCTestEnum SilenceWithCast3c = (const CCTestEnum) 51; // no-warning 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const CCTestEnum SilenceWithCast4c = (const volatile CCTestEnum) 51; // no-warning 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 32379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz JahanianCCTestEnum foo(CCTestEnum r) { 33379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian return 20; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 34379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian} 35379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 36379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanianenum Test2 { K_zero, K_one }; 37379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanianenum Test2 test2(enum Test2 *t) { 38379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian *t = 20; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}} 39379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian return 10; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}} 40379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian} 41379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 4248a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly// PR15069 4348a1e81715bf9c37a4168d83f4218e6517e29541Joey Goulytypedef enum 4448a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly{ 4548a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly a = 0 4648a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly} T; 4748a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly 4848a1e81715bf9c37a4168d83f4218e6517e29541Joey Goulyvoid f() 4948a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly{ 5048a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly T x = a; 5148a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly x += 1; // expected-warning {{integer constant not in range of enumerated type}} 5248a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly} 5348a1e81715bf9c37a4168d83f4218e6517e29541Joey Gouly 54379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanianint main() { 55379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian CCTestEnum test = 1; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 56379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian test = 600; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 57379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian foo(2); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 58379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian foo(-1); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}} 59379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian foo(4); 60379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian foo(Two+1); 61379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian} 62379b28183a7dcb715c3f3eb2da4b0157d6d8ffbeFariborz Jahanian 63