[cfe-commits] r86327 - /cfe/trunk/test/Sema/conversion.c

John McCall rjmccall at apple.com
Fri Nov 6 19:30:38 PST 2009


Author: rjmccall
Date: Fri Nov  6 21:30:38 2009
New Revision: 86327

URL: http://llvm.org/viewvc/llvm-project?rev=86327&view=rev
Log:
Test case for -Wconversion.


Added:
    cfe/trunk/test/Sema/conversion.c

Added: cfe/trunk/test/Sema/conversion.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/conversion.c?rev=86327&view=auto

==============================================================================
--- cfe/trunk/test/Sema/conversion.c (added)
+++ cfe/trunk/test/Sema/conversion.c Fri Nov  6 21:30:38 2009
@@ -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);
+}





More information about the cfe-commits mailing list