1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -triple x86_64-unknown-unknown %s -verify 2*67e74705SXin Li 3*67e74705SXin Li typedef struct { unsigned long bits[(((1) + (64) - 1) / (64))]; } cpumask_t; 4*67e74705SXin Li cpumask_t x; foo()5*67e74705SXin Livoid foo() { 6*67e74705SXin Li (void)x; 7*67e74705SXin Li } bar()8*67e74705SXin Livoid bar() { 9*67e74705SXin Li char* a; 10*67e74705SXin Li double b; 11*67e74705SXin Li b = (double)a; // expected-error {{pointer cannot be cast to type}} 12*67e74705SXin Li a = (char*)b; // expected-error {{cannot be cast to a pointer type}} 13*67e74705SXin Li } 14*67e74705SXin Li bar1(long * next)15*67e74705SXin Lilong bar1(long *next) { 16*67e74705SXin Li return (long)(*next)++; 17*67e74705SXin Li } 18*67e74705SXin Li 19*67e74705SXin Li typedef _Bool Bool; 20*67e74705SXin Li typedef int Int; 21*67e74705SXin Li typedef long Long; 22*67e74705SXin Li typedef float Float; 23*67e74705SXin Li typedef double Double; 24*67e74705SXin Li typedef _Complex int CInt; 25*67e74705SXin Li typedef _Complex long CLong; 26*67e74705SXin Li typedef _Complex float CFloat; 27*67e74705SXin Li typedef _Complex double CDouble; 28*67e74705SXin Li typedef void *VoidPtr; 29*67e74705SXin Li typedef char *CharPtr; 30*67e74705SXin Li testBool(Bool v)31*67e74705SXin Livoid testBool(Bool v) { 32*67e74705SXin Li (void) (Bool) v; 33*67e74705SXin Li (void) (Int) v; 34*67e74705SXin Li (void) (Long) v; 35*67e74705SXin Li (void) (Float) v; 36*67e74705SXin Li (void) (Double) v; 37*67e74705SXin Li (void) (CInt) v; 38*67e74705SXin Li (void) (CLong) v; 39*67e74705SXin Li (void) (CFloat) v; 40*67e74705SXin Li (void) (CDouble) v; 41*67e74705SXin Li (void) (VoidPtr) v; 42*67e74705SXin Li (void) (CharPtr) v; 43*67e74705SXin Li } 44*67e74705SXin Li testInt(Int v)45*67e74705SXin Livoid testInt(Int v) { 46*67e74705SXin Li (void) (Bool) v; 47*67e74705SXin Li (void) (Int) v; 48*67e74705SXin Li (void) (Long) v; 49*67e74705SXin Li (void) (Float) v; 50*67e74705SXin Li (void) (Double) v; 51*67e74705SXin Li (void) (CInt) v; 52*67e74705SXin Li (void) (CLong) v; 53*67e74705SXin Li (void) (CFloat) v; 54*67e74705SXin Li (void) (CDouble) v; 55*67e74705SXin Li (void) (VoidPtr) v; // expected-warning{{cast to 'VoidPtr' (aka 'void *') from smaller integer type 'Int' (aka 'int')}} 56*67e74705SXin Li (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}} 57*67e74705SXin Li 58*67e74705SXin Li // Test that casts to void* can be controlled separately 59*67e74705SXin Li // from other -Wint-to-pointer-cast warnings. 60*67e74705SXin Li #pragma clang diagnostic push 61*67e74705SXin Li #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" 62*67e74705SXin Li (void) (VoidPtr) v; // no-warning 63*67e74705SXin Li (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}} 64*67e74705SXin Li #pragma clang diagnostic pop 65*67e74705SXin Li } 66*67e74705SXin Li testLong(Long v)67*67e74705SXin Livoid testLong(Long v) { 68*67e74705SXin Li (void) (Bool) v; 69*67e74705SXin Li (void) (Int) v; 70*67e74705SXin Li (void) (Long) v; 71*67e74705SXin Li (void) (Float) v; 72*67e74705SXin Li (void) (Double) v; 73*67e74705SXin Li (void) (CInt) v; 74*67e74705SXin Li (void) (CLong) v; 75*67e74705SXin Li (void) (CFloat) v; 76*67e74705SXin Li (void) (CDouble) v; 77*67e74705SXin Li (void) (VoidPtr) v; 78*67e74705SXin Li (void) (CharPtr) v; 79*67e74705SXin Li } 80*67e74705SXin Li testFloat(Float v)81*67e74705SXin Livoid testFloat(Float v) { 82*67e74705SXin Li (void) (Bool) v; 83*67e74705SXin Li (void) (Int) v; 84*67e74705SXin Li (void) (Long) v; 85*67e74705SXin Li (void) (Float) v; 86*67e74705SXin Li (void) (Double) v; 87*67e74705SXin Li (void) (CInt) v; 88*67e74705SXin Li (void) (CLong) v; 89*67e74705SXin Li (void) (CFloat) v; 90*67e74705SXin Li (void) (CDouble) v; 91*67e74705SXin Li } 92*67e74705SXin Li testDouble(Double v)93*67e74705SXin Livoid testDouble(Double v) { 94*67e74705SXin Li (void) (Bool) v; 95*67e74705SXin Li (void) (Int) v; 96*67e74705SXin Li (void) (Long) v; 97*67e74705SXin Li (void) (Float) v; 98*67e74705SXin Li (void) (Double) v; 99*67e74705SXin Li (void) (CInt) v; 100*67e74705SXin Li (void) (CLong) v; 101*67e74705SXin Li (void) (CFloat) v; 102*67e74705SXin Li (void) (CDouble) v; 103*67e74705SXin Li } 104*67e74705SXin Li testCI(CInt v)105*67e74705SXin Livoid testCI(CInt v) { 106*67e74705SXin Li (void) (Bool) v; 107*67e74705SXin Li (void) (Int) v; 108*67e74705SXin Li (void) (Long) v; 109*67e74705SXin Li (void) (Float) v; 110*67e74705SXin Li (void) (Double) v; 111*67e74705SXin Li (void) (CInt) v; 112*67e74705SXin Li (void) (CLong) v; 113*67e74705SXin Li (void) (CFloat) v; 114*67e74705SXin Li (void) (CDouble) v; 115*67e74705SXin Li } 116*67e74705SXin Li testCLong(CLong v)117*67e74705SXin Livoid testCLong(CLong v) { 118*67e74705SXin Li (void) (Bool) v; 119*67e74705SXin Li (void) (Int) v; 120*67e74705SXin Li (void) (Long) v; 121*67e74705SXin Li (void) (Float) v; 122*67e74705SXin Li (void) (Double) v; 123*67e74705SXin Li (void) (CInt) v; 124*67e74705SXin Li (void) (CLong) v; 125*67e74705SXin Li (void) (CFloat) v; 126*67e74705SXin Li (void) (CDouble) v; 127*67e74705SXin Li } 128*67e74705SXin Li testCFloat(CFloat v)129*67e74705SXin Livoid testCFloat(CFloat v) { 130*67e74705SXin Li (void) (Bool) v; 131*67e74705SXin Li (void) (Int) v; 132*67e74705SXin Li (void) (Long) v; 133*67e74705SXin Li (void) (Float) v; 134*67e74705SXin Li (void) (Double) v; 135*67e74705SXin Li (void) (CInt) v; 136*67e74705SXin Li (void) (CLong) v; 137*67e74705SXin Li (void) (CFloat) v; 138*67e74705SXin Li (void) (CDouble) v; 139*67e74705SXin Li } 140*67e74705SXin Li testCDouble(CDouble v)141*67e74705SXin Livoid testCDouble(CDouble v) { 142*67e74705SXin Li (void) (Bool) v; 143*67e74705SXin Li (void) (Int) v; 144*67e74705SXin Li (void) (Long) v; 145*67e74705SXin Li (void) (Float) v; 146*67e74705SXin Li (void) (Double) v; 147*67e74705SXin Li (void) (CInt) v; 148*67e74705SXin Li (void) (CLong) v; 149*67e74705SXin Li (void) (CFloat) v; 150*67e74705SXin Li (void) (CDouble) v; 151*67e74705SXin Li } 152*67e74705SXin Li testVoidPtr(VoidPtr v)153*67e74705SXin Livoid testVoidPtr(VoidPtr v) { 154*67e74705SXin Li (void) (Bool) v; 155*67e74705SXin Li (void) (Int) v; 156*67e74705SXin Li (void) (Long) v; 157*67e74705SXin Li (void) (VoidPtr) v; 158*67e74705SXin Li (void) (CharPtr) v; 159*67e74705SXin Li } 160*67e74705SXin Li testCharPtr(CharPtr v)161*67e74705SXin Livoid testCharPtr(CharPtr v) { 162*67e74705SXin Li (void) (Bool) v; 163*67e74705SXin Li (void) (Int) v; 164*67e74705SXin Li (void) (Long) v; 165*67e74705SXin Li (void) (VoidPtr) v; 166*67e74705SXin Li (void) (CharPtr) v; 167*67e74705SXin Li } 168*67e74705SXin Li 169*67e74705SXin Li typedef enum { x_a, x_b } X; intToPointerCast2(X x)170*67e74705SXin Livoid *intToPointerCast2(X x) { 171*67e74705SXin Li return (void*)x; 172*67e74705SXin Li } 173*67e74705SXin Li intToPointerCast3()174*67e74705SXin Livoid *intToPointerCast3() { 175*67e74705SXin Li return (void*)(1 + 3); 176*67e74705SXin Li } 177