1 // RUN: %clang_cc1 -fsyntax-only -triple x86_64-unknown-unknown %s -verify
3 typedef struct { unsigned long bits[(((1) + (64) - 1) / (64))]; } cpumask_t;
11 b = (double)a; // expected-error {{pointer cannot be cast to type}}
12 a = (char*)b; // expected-error {{cannot be cast to a pointer type}}
15 long bar1(long *next) {
16 return (long)(*next)++;
23 typedef double Double;
24 typedef _Complex int CInt;
25 typedef _Complex long CLong;
26 typedef _Complex float CFloat;
27 typedef _Complex double CDouble;
28 typedef void *VoidPtr;
29 typedef char *CharPtr;
31 void testBool(Bool v) {
55 (void) (VoidPtr) v; // expected-warning{{cast to 'VoidPtr' (aka 'void *') from smaller integer type 'Int' (aka 'int')}}
56 (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}}
58 // Test that casts to void* can be controlled separately
59 // from other -Wint-to-pointer-cast warnings.
60 #pragma clang diagnostic push
61 #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"
62 (void) (VoidPtr) v; // no-warning
63 (void) (CharPtr) v; // expected-warning{{cast to 'CharPtr' (aka 'char *') from smaller integer type 'Int' (aka 'int')}}
64 #pragma clang diagnostic pop
67 void testLong(Long v) {
81 void testFloat(Float v) {
93 void testDouble(Double v) {
105 void testCI(CInt v) {
117 void testCLong(CLong v) {
129 void testCFloat(CFloat v) {
141 void testCDouble(CDouble v) {
153 void testVoidPtr(VoidPtr v) {
161 void testCharPtr(CharPtr v) {
169 typedef enum { x_a, x_b } X;
170 void *intToPointerCast2(X x) {
174 void *intToPointerCast3() {
175 return (void*)(1 + 3);