1// RUN: %clang_cc1 %s -verify -fsyntax-only 2// RUN: %clang_cc1 %s -verify -fsyntax-only -fexperimental-new-constant-interpreter 3 4typedef signed char BOOL; 5#define YES __objc_yes 6#define NO __objc_no 7 8BOOL B; 9 10int main(void) { 11 B = 0; 12 B = 1; 13 B = YES; 14 B = NO; 15 16 B = -1; // expected-warning{{implicit conversion from constant value -1 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 17 B = 0 - 1; // expected-warning{{implicit conversion from constant value -1 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 18 B = YES + YES; // expected-warning {{implicit conversion from constant value 2 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 19 B = YES | YES; 20 21 B = B ? 2 : 2; // expected-warning 2 {{implicit conversion from constant value 2 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 22 23 BOOL Init = -1; // expected-warning{{implicit conversion from constant value -1 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 24 BOOL Init2 = B ? 2 : 2; // expected-warning 2 {{implicit conversion from constant value 2 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 25 26 void takesbool(BOOL); 27 takesbool(43); // expected-warning {{implicit conversion from constant value 43 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 28 29 BOOL OutOfRange = 400; // expected-warning{{implicit conversion from constant value 400 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 30} 31 32@interface BoolProp 33@property BOOL b; 34@end 35 36void f(BoolProp *bp) { 37 bp.b = 43; // expected-warning {{implicit conversion from constant value 43 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 38 [bp setB:43]; // expected-warning {{implicit conversion from constant value 43 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} 39} 40