forked from OSchip/llvm-project
parent
fceb64bd04
commit
554e857cf4
|
@ -0,0 +1,226 @@
|
|||
// RUN: clang-cc -fsyntax-only -verify -Wconversion -triple x86_64-apple-darwin %s
|
||||
|
||||
#define BIG 0x7f7f7f7f7f7f7f7fL
|
||||
|
||||
void test0(char c, short s, int i, long l, long long ll) {
|
||||
c = c;
|
||||
c = s; // expected-warning {{implicit cast loses integer precision}}
|
||||
c = i; // expected-warning {{implicit cast loses integer precision}}
|
||||
c = l; // expected-warning {{implicit cast loses integer precision}}
|
||||
s = c;
|
||||
s = s;
|
||||
s = i; // expected-warning {{implicit cast loses integer precision}}
|
||||
s = l; // expected-warning {{implicit cast loses integer precision}}
|
||||
i = c;
|
||||
i = s;
|
||||
i = i;
|
||||
i = l; // expected-warning {{implicit cast loses integer precision}}
|
||||
l = c;
|
||||
l = s;
|
||||
l = i;
|
||||
l = l;
|
||||
|
||||
c = (char) 0;
|
||||
c = (short) 0;
|
||||
c = (int) 0;
|
||||
c = (long) 0;
|
||||
s = (char) 0;
|
||||
s = (short) 0;
|
||||
s = (int) 0;
|
||||
s = (long) 0;
|
||||
i = (char) 0;
|
||||
i = (short) 0;
|
||||
i = (int) 0;
|
||||
i = (long) 0;
|
||||
l = (char) 0;
|
||||
l = (short) 0;
|
||||
l = (int) 0;
|
||||
l = (long) 0;
|
||||
|
||||
c = (char) BIG;
|
||||
c = (short) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
c = (int) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
c = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
s = (char) BIG;
|
||||
s = (short) BIG;
|
||||
s = (int) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
s = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
i = (char) BIG;
|
||||
i = (short) BIG;
|
||||
i = (int) BIG;
|
||||
i = (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
l = (char) BIG;
|
||||
l = (short) BIG;
|
||||
l = (int) BIG;
|
||||
l = (long) BIG;
|
||||
}
|
||||
|
||||
char test1(long long ll) {
|
||||
return (long long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (short) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (char) ll;
|
||||
return (long long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (short) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (char) BIG;
|
||||
}
|
||||
|
||||
short test2(long long ll) {
|
||||
return (long long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (short) ll;
|
||||
return (char) ll;
|
||||
return (long long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (short) BIG;
|
||||
return (char) BIG;
|
||||
}
|
||||
|
||||
int test3(long long ll) {
|
||||
return (long long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) ll; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) ll;
|
||||
return (short) ll;
|
||||
return (char) ll;
|
||||
return (long long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (long) BIG; // expected-warning {{implicit cast loses integer precision}}
|
||||
return (int) BIG;
|
||||
return (short) BIG;
|
||||
return (char) BIG;
|
||||
}
|
||||
|
||||
long test4(long long ll) {
|
||||
return (long long) ll;
|
||||
return (long) ll;
|
||||
return (int) ll;
|
||||
return (short) ll;
|
||||
return (char) ll;
|
||||
return (long long) BIG;
|
||||
return (long) BIG;
|
||||
return (int) BIG;
|
||||
return (short) BIG;
|
||||
return (char) BIG;
|
||||
}
|
||||
|
||||
long long test5(long long ll) {
|
||||
return (long long) ll;
|
||||
return (long) ll;
|
||||
return (int) ll;
|
||||
return (short) ll;
|
||||
return (char) ll;
|
||||
return (long long) BIG;
|
||||
return (long) BIG;
|
||||
return (int) BIG;
|
||||
return (short) BIG;
|
||||
return (char) BIG;
|
||||
}
|
||||
|
||||
void takes_char(char);
|
||||
void takes_short(short);
|
||||
void takes_int(int);
|
||||
void takes_long(long);
|
||||
void takes_longlong(long long);
|
||||
void takes_float(float);
|
||||
void takes_double(double);
|
||||
void takes_longdouble(long double);
|
||||
|
||||
void test6(char v) {
|
||||
takes_char(v);
|
||||
takes_short(v);
|
||||
takes_int(v);
|
||||
takes_long(v);
|
||||
takes_longlong(v);
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test7(short v) {
|
||||
takes_char(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_short(v);
|
||||
takes_int(v);
|
||||
takes_long(v);
|
||||
takes_longlong(v);
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test8(int v) {
|
||||
takes_char(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_short(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_int(v);
|
||||
takes_long(v);
|
||||
takes_longlong(v);
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test9(long v) {
|
||||
takes_char(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_short(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_int(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_long(v);
|
||||
takes_longlong(v);
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test10(long long v) {
|
||||
takes_char(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_short(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_int(v); // expected-warning {{implicit cast loses integer precision}}
|
||||
takes_long(v);
|
||||
takes_longlong(v);
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test11(float v) {
|
||||
takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_float(v);
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test12(double v) {
|
||||
takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_float(v); // expected-warning {{implicit cast loses floating-point precision}}
|
||||
takes_double(v);
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test13(long double v) {
|
||||
takes_char(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_short(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_int(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_long(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_longlong(v); // expected-warning {{implicit cast turns floating-point number into integer}}
|
||||
takes_float(v); // expected-warning {{implicit cast loses floating-point precision}}
|
||||
takes_double(v); // expected-warning {{implicit cast loses floating-point precision}}
|
||||
takes_longdouble(v);
|
||||
}
|
||||
|
||||
void test14(long l) {
|
||||
// Fine because of the boolean whitelist.
|
||||
char c;
|
||||
c = (l == 4);
|
||||
c = ((l <= 4) && (l >= 0));
|
||||
c = ((l <= 4) && (l >= 0)) || (l > 20);
|
||||
}
|
Loading…
Reference in New Issue