conversion.c revision f2370c9b4aade940e2253b5b33262ba507d1d71f
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify -Wconversion -triple x86_64-apple-darwin %s
2d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
3d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall#define BIG 0x7f7f7f7f7f7f7f7fL
4d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
5d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test0(char c, short s, int i, long l, long long ll) {
6d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = c;
7d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = s; // expected-warning {{implicit cast loses integer precision}}
8d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = i; // expected-warning {{implicit cast loses integer precision}}
9d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = l; // expected-warning {{implicit cast loses integer precision}}
10d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = c;
11d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = s;
12d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = i; // expected-warning {{implicit cast loses integer precision}}
13d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = l; // expected-warning {{implicit cast loses integer precision}}
14d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = c;
15d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = s;
16d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = i;
17d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = l; // expected-warning {{implicit cast loses integer precision}}
18d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = c;
19d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = s;
20d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = i;
21d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = l;
22d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
23d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (char) 0;
24d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (short) 0;
25d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (int) 0;
26d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (long) 0;
27d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (char) 0;
28d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (short) 0;
29d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (int) 0;
30d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (long) 0;
31d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (char) 0;
32d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (short) 0;
33d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (int) 0;
34d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (long) 0;
35d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (char) 0;
36d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (short) 0;
37d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (int) 0;
38d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (long) 0;
39d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
40d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (char) BIG;
41d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (short) BIG; // expected-warning {{implicit cast loses integer precision}}
42d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (int) BIG; // expected-warning {{implicit cast loses integer precision}}
43d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
44d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (char) BIG;
45d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (short) BIG;
46d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (int) BIG; // expected-warning {{implicit cast loses integer precision}}
47d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  s = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
48d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (char) BIG;
49d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (short) BIG;
50d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (int) BIG;
51d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  i = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
52d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (char) BIG;
53d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (short) BIG;
54d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (int) BIG;
55d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  l = (long) BIG;
56d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
57d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
58d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallchar test1(long long ll) {
59d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) ll; // expected-warning {{implicit cast loses integer precision}}
60d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) ll; // expected-warning {{implicit cast loses integer precision}}
61d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) ll; // expected-warning {{implicit cast loses integer precision}}
62d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) ll; // expected-warning {{implicit cast loses integer precision}}
63d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) ll;
64d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) BIG; // expected-warning {{implicit cast loses integer precision}}
65d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) BIG; // expected-warning {{implicit cast loses integer precision}}
66d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) BIG; // expected-warning {{implicit cast loses integer precision}}
67d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) BIG; // expected-warning {{implicit cast loses integer precision}}
68d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) BIG;
69d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
70d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
71d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallshort test2(long long ll) {
72d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) ll; // expected-warning {{implicit cast loses integer precision}}
73d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) ll; // expected-warning {{implicit cast loses integer precision}}
74d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) ll; // expected-warning {{implicit cast loses integer precision}}
75d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) ll;
76d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) ll;
77d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) BIG;  // expected-warning {{implicit cast loses integer precision}}
78d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) BIG;  // expected-warning {{implicit cast loses integer precision}}
79d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) BIG;  // expected-warning {{implicit cast loses integer precision}}
80d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) BIG;
81d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) BIG;
82d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
83d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
84d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallint test3(long long ll) {
85d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) ll;  // expected-warning {{implicit cast loses integer precision}}
86d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) ll;  // expected-warning {{implicit cast loses integer precision}}
87d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) ll;
88d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) ll;
89d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) ll;
90d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) BIG;  // expected-warning {{implicit cast loses integer precision}}
91d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) BIG; // expected-warning {{implicit cast loses integer precision}}
92d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) BIG;
93d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) BIG;
94d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) BIG;
95d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
96d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
97d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCalllong test4(long long ll) {
98d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) ll;
99d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) ll;
100d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) ll;
101d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) ll;
102d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) ll;
103d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) BIG;
104d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) BIG;
105d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) BIG;
106d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) BIG;
107d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) BIG;
108d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
109d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
110d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCalllong long test5(long long ll) {
111d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) ll;
112d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) ll;
113d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) ll;
114d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) ll;
115d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) ll;
116d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long long) BIG;
117d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (long) BIG;
118d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (int) BIG;
119d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (short) BIG;
120d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  return (char) BIG;
121d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
122d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
123d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_char(char);
124d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_short(short);
125d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_int(int);
126d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_long(long);
127d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_longlong(long long);
128d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_float(float);
129d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_double(double);
130d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid takes_longdouble(long double);
131d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
132d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test6(char v) {
133d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v);
134d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v);
135d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v);
136d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v);
137d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v);
138d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
139d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
140d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
141d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
142d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
143d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test7(short v) {
144d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast loses integer precision}}
145d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v);
146d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v);
147d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v);
148d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v);
149d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
150d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
151d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
152d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
153d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
154d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test8(int v) {
155d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast loses integer precision}}
156d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast loses integer precision}}
157d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v);
158d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v);
159d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v);
160d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
161d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
162d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
163d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
164d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
165d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test9(long v) {
166d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast loses integer precision}}
167d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast loses integer precision}}
168d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v); // expected-warning {{implicit cast loses integer precision}}
169d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v);
170d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v);
171d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
172d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
173d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
174d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
175d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
176d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test10(long long v) {
177d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast loses integer precision}}
178d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast loses integer precision}}
179d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v); // expected-warning {{implicit cast loses integer precision}}
180d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v);
181d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v);
182d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
183d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
184d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
185d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
186d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
187d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test11(float v) {
188d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
189d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
190d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
191d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
192d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
193d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v);
194d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
195d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
196d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
197d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
198d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test12(double v) {
199d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
200d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
201d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
202d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
203d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
204d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v); // expected-warning {{implicit cast loses floating-point precision}}
205d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v);
206d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
207d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
208d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
209d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test13(long double v) {
210d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
211d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
212d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
213d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
214d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
215d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_float(v); // expected-warning {{implicit cast loses floating-point precision}}
216d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_double(v); // expected-warning {{implicit cast loses floating-point precision}}
217d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  takes_longdouble(v);
218d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
219d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall
220d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCallvoid test14(long l) {
221d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  // Fine because of the boolean whitelist.
222d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  char c;
223d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = (l == 4);
224d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = ((l <= 4) && (l >= 0));
225d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall  c = ((l <= 4) && (l >= 0)) || (l > 20);
226d5c376e4a034233a8efee81404041e33d8f0df5aJohn McCall}
227e8babd198c28bf1a443ef6a989dd2fe0ab58cc08John McCall
228e8babd198c28bf1a443ef6a989dd2fe0ab58cc08John McCallvoid test15(char c) {
229e8babd198c28bf1a443ef6a989dd2fe0ab58cc08John McCall  c = c + 1 + c * 2;
230e8babd198c28bf1a443ef6a989dd2fe0ab58cc08John McCall  c = (short) c + 1 + c * 2; // expected-warning {{implicit cast loses integer precision}}
231e8babd198c28bf1a443ef6a989dd2fe0ab58cc08John McCall}
2328406aedf4782771e520614ee379594dc0a4f7d5fJohn McCall
2338406aedf4782771e520614ee379594dc0a4f7d5fJohn McCall// PR 5422
2348406aedf4782771e520614ee379594dc0a4f7d5fJohn McCallextern void *test16_external;
2358406aedf4782771e520614ee379594dc0a4f7d5fJohn McCallvoid test16(void) {
2368406aedf4782771e520614ee379594dc0a4f7d5fJohn McCall  int a = (unsigned long) &test16_external; // expected-warning {{implicit cast loses integer precision}}
2378406aedf4782771e520614ee379594dc0a4f7d5fJohn McCall}
238f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall
239f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall// PR 5938
240f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCallvoid test17() {
241f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  union {
242f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall    unsigned long long a : 8;
243f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall    unsigned long long b : 32;
244f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall    unsigned long long c;
245f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  } U;
246f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall
247f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  unsigned int x;
248f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  x = U.a;
249f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  x = U.b;
250f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  x = U.c; // expected-warning {{implicit cast loses integer precision}}
251f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall}
252f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall
253f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall// PR 5939
254f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCallvoid test18() {
255f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  union {
256f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall    unsigned long long a : 1;
257f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall    unsigned long long b;
258f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  } U;
259f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall
260f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  int x;
261f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  x = (U.a ? 0 : 1);
262f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall  x = (U.b ? 0 : 1);
263f2370c9b4aade940e2253b5b33262ba507d1d71fJohn McCall}
264