1// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core.BoolAssignment -analyzer-store=region -verify %s 2 3// Test C++'s bool 4 5void test_cppbool_initialization(int y) { 6 if (y < 0) { 7 bool x = y; // expected-warning {{Assignment of a non-Boolean value}} 8 return; 9 } 10 if (y > 1) { 11 bool x = y; // expected-warning {{Assignment of a non-Boolean value}} 12 return; 13 } 14 bool x = y; // no-warning 15} 16 17void test_cppbool_assignment(int y) { 18 bool x = 0; // no-warning 19 if (y < 0) { 20 x = y; // expected-warning {{Assignment of a non-Boolean value}} 21 return; 22 } 23 if (y > 1) { 24 x = y; // expected-warning {{Assignment of a non-Boolean value}} 25 return; 26 } 27 x = y; // no-warning 28} 29 30// Test Objective-C's BOOL 31 32typedef signed char BOOL; 33 34void test_BOOL_initialization(int y) { 35 if (y < 0) { 36 BOOL x = y; // expected-warning {{Assignment of a non-Boolean value}} 37 return; 38 } 39 if (y > 1) { 40 BOOL x = y; // expected-warning {{Assignment of a non-Boolean value}} 41 return; 42 } 43 BOOL x = y; // no-warning 44} 45 46void test_BOOL_assignment(int y) { 47 BOOL x = 0; // no-warning 48 if (y < 0) { 49 x = y; // expected-warning {{Assignment of a non-Boolean value}} 50 return; 51 } 52 if (y > 1) { 53 x = y; // expected-warning {{Assignment of a non-Boolean value}} 54 return; 55 } 56 x = y; // no-warning 57} 58 59 60// Test MacTypes.h's Boolean 61 62typedef unsigned char Boolean; 63 64void test_Boolean_initialization(int y) { 65 if (y < 0) { 66 Boolean x = y; // expected-warning {{Assignment of a non-Boolean value}} 67 return; 68 } 69 if (y > 1) { 70 Boolean x = y; // expected-warning {{Assignment of a non-Boolean value}} 71 return; 72 } 73 Boolean x = y; // no-warning 74} 75 76void test_Boolean_assignment(int y) { 77 Boolean x = 0; // no-warning 78 if (y < 0) { 79 x = y; // expected-warning {{Assignment of a non-Boolean value}} 80 return; 81 } 82 if (y > 1) { 83 x = y; // expected-warning {{Assignment of a non-Boolean value}} 84 return; 85 } 86 x = y; // no-warning 87} 88