blob: 7971163c12d02c6a54ae3802b22a2642cb09a0c9 [file] [log] [blame]
David Blaikie282ad872012-10-16 18:53:14 +00001// RUN: %clang_cc1 -fsyntax-only -triple x86_64-unknown-unknown %s -verify
Chris Lattner3bc4d202007-10-29 04:26:44 +00002
3typedef struct { unsigned long bits[(((1) + (64) - 1) / (64))]; } cpumask_t;
4cpumask_t x;
5void foo() {
6 (void)x;
7}
Eli Friedmanf4e3ad62009-05-01 02:23:58 +00008void bar() {
9 char* a;
10 double b;
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}}
13}
Chris Lattner3bc4d202007-10-29 04:26:44 +000014
Fariborz Jahanian3f21c152009-11-23 19:51:43 +000015long bar1(long *next) {
16 return (long)(*next)++;
17}
18
Abramo Bagnarafbd2c6a2010-12-28 17:19:27 +000019typedef _Bool Bool;
20typedef int Int;
21typedef long Long;
22typedef float Float;
23typedef double Double;
24typedef _Complex int CInt;
25typedef _Complex long CLong;
26typedef _Complex float CFloat;
27typedef _Complex double CDouble;
28typedef void *VoidPtr;
29typedef char *CharPtr;
30
31void testBool(Bool v) {
32 (void) (Bool) v;
33 (void) (Int) v;
34 (void) (Long) v;
35 (void) (Float) v;
36 (void) (Double) v;
37 (void) (CInt) v;
38 (void) (CLong) v;
39 (void) (CFloat) v;
40 (void) (CDouble) v;
41 (void) (VoidPtr) v;
42 (void) (CharPtr) v;
43}
44
45void testInt(Int v) {
46 (void) (Bool) v;
47 (void) (Int) v;
48 (void) (Long) v;
49 (void) (Float) v;
50 (void) (Double) v;
51 (void) (CInt) v;
52 (void) (CLong) v;
53 (void) (CFloat) v;
54 (void) (CDouble) v;
David Blaikie282ad872012-10-16 18:53:14 +000055 (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')}}
Ted Kremeneke3dc7f72013-05-29 21:50:46 +000057
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
Abramo Bagnarafbd2c6a2010-12-28 17:19:27 +000065}
66
67void testLong(Long v) {
68 (void) (Bool) v;
69 (void) (Int) v;
70 (void) (Long) v;
71 (void) (Float) v;
72 (void) (Double) v;
73 (void) (CInt) v;
74 (void) (CLong) v;
75 (void) (CFloat) v;
76 (void) (CDouble) v;
77 (void) (VoidPtr) v;
78 (void) (CharPtr) v;
79}
80
81void testFloat(Float v) {
82 (void) (Bool) v;
83 (void) (Int) v;
84 (void) (Long) v;
85 (void) (Float) v;
86 (void) (Double) v;
87 (void) (CInt) v;
88 (void) (CLong) v;
89 (void) (CFloat) v;
90 (void) (CDouble) v;
91}
92
93void testDouble(Double v) {
94 (void) (Bool) v;
95 (void) (Int) v;
96 (void) (Long) v;
97 (void) (Float) v;
98 (void) (Double) v;
99 (void) (CInt) v;
100 (void) (CLong) v;
101 (void) (CFloat) v;
102 (void) (CDouble) v;
103}
104
105void testCI(CInt v) {
106 (void) (Bool) v;
107 (void) (Int) v;
108 (void) (Long) v;
109 (void) (Float) v;
110 (void) (Double) v;
111 (void) (CInt) v;
112 (void) (CLong) v;
113 (void) (CFloat) v;
114 (void) (CDouble) v;
115}
116
117void testCLong(CLong v) {
118 (void) (Bool) v;
119 (void) (Int) v;
120 (void) (Long) v;
121 (void) (Float) v;
122 (void) (Double) v;
123 (void) (CInt) v;
124 (void) (CLong) v;
125 (void) (CFloat) v;
126 (void) (CDouble) v;
127}
128
129void testCFloat(CFloat v) {
130 (void) (Bool) v;
131 (void) (Int) v;
132 (void) (Long) v;
133 (void) (Float) v;
134 (void) (Double) v;
135 (void) (CInt) v;
136 (void) (CLong) v;
137 (void) (CFloat) v;
138 (void) (CDouble) v;
139}
140
141void testCDouble(CDouble v) {
142 (void) (Bool) v;
143 (void) (Int) v;
144 (void) (Long) v;
145 (void) (Float) v;
146 (void) (Double) v;
147 (void) (CInt) v;
148 (void) (CLong) v;
149 (void) (CFloat) v;
150 (void) (CDouble) v;
151}
152
153void testVoidPtr(VoidPtr v) {
154 (void) (Bool) v;
155 (void) (Int) v;
156 (void) (Long) v;
157 (void) (VoidPtr) v;
158 (void) (CharPtr) v;
159}
160
161void testCharPtr(CharPtr v) {
162 (void) (Bool) v;
163 (void) (Int) v;
164 (void) (Long) v;
165 (void) (VoidPtr) v;
166 (void) (CharPtr) v;
167}
David Blaikie282ad872012-10-16 18:53:14 +0000168
169typedef enum { x_a, x_b } X;
170void *intToPointerCast2(X x) {
171 return (void*)x;
172}
173
174void *intToPointerCast3() {
175 return (void*)(1 + 3);
176}