summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Sema/conversion.c10
-rw-r--r--clang/test/Sema/ext_vector_casts.c10
-rw-r--r--clang/test/Sema/implicit-int-float-conversion.c53
-rw-r--r--clang/test/Sema/implicit-int-float-narrowing.cpp10
4 files changed, 73 insertions, 10 deletions
diff --git a/clang/test/Sema/conversion.c b/clang/test/Sema/conversion.c
index 07b22a8a648..ba4adbdad22 100644
--- a/clang/test/Sema/conversion.c
+++ b/clang/test/Sema/conversion.c
@@ -233,7 +233,7 @@ void test8(int v) {
takes_int(v);
takes_long(v);
takes_longlong(v);
- takes_float(v);
+ takes_float(v); // expected-warning {{implicit conversion from 'int' to 'float' may lose precision}}
takes_double(v);
takes_longdouble(v);
}
@@ -244,8 +244,8 @@ void test9(long v) {
takes_int(v); // expected-warning {{implicit conversion loses integer precision}}
takes_long(v);
takes_longlong(v);
- takes_float(v);
- takes_double(v);
+ takes_float(v); // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+ takes_double(v); // expected-warning {{implicit conversion from 'long' to 'double' may lose precision}}
takes_longdouble(v);
}
@@ -255,8 +255,8 @@ void test10(long long v) {
takes_int(v); // expected-warning {{implicit conversion loses integer precision}}
takes_long(v);
takes_longlong(v);
- takes_float(v);
- takes_double(v);
+ takes_float(v); // expected-warning {{implicit conversion from 'long long' to 'float' may lose precision}}
+ takes_double(v); // expected-warning {{implicit conversion from 'long long' to 'double' may lose precision}}
takes_longdouble(v);
}
diff --git a/clang/test/Sema/ext_vector_casts.c b/clang/test/Sema/ext_vector_casts.c
index 6aaedbe7fd1..b13f8368348 100644
--- a/clang/test/Sema/ext_vector_casts.c
+++ b/clang/test/Sema/ext_vector_casts.c
@@ -115,12 +115,12 @@ static void splats(int i, long l, __uint128_t t, float f, double d) {
vl = vl + t; // expected-warning {{implicit conversion loses integer precision}}
vf = 1 + vf;
- vf = l + vf;
+ vf = l + vf; // expected-warning {{implicit conversion from 'long' to 'float2' (vector of 2 'float' values) may lose precision}}
vf = 2.0 + vf;
vf = d + vf; // expected-warning {{implicit conversion loses floating-point precision}}
- vf = vf + 0xffffffff;
+ vf = vf + 0xffffffff; // expected-warning {{implicit conversion from 'unsigned int' to 'float2' (vector of 2 'float' values) changes value from 4294967295 to 4294967296}}
vf = vf + 2.1; // expected-warning {{implicit conversion loses floating-point precision}}
-
- vd = l + vd;
- vd = vd + t;
+
+ vd = l + vd; // expected-warning {{implicit conversion from 'long' to 'double2' (vector of 2 'double' values) may lose precision}}
+ vd = vd + t; // expected-warning {{implicit conversion from '__uint128_t' (aka 'unsigned __int128') to 'double2' (vector of 2 'double' values) may lose precision}}
}
diff --git a/clang/test/Sema/implicit-int-float-conversion.c b/clang/test/Sema/implicit-int-float-conversion.c
new file mode 100644
index 00000000000..0933cd93516
--- /dev/null
+++ b/clang/test/Sema/implicit-int-float-conversion.c
@@ -0,0 +1,53 @@
+// RUN: %clang_cc1 %s -verify -Wno-conversion -Wimplicit-int-float-conversion
+
+long testReturn(long a, float b) {
+ return a + b; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+}
+
+void testAssignment() {
+ float f = 222222;
+ double b = 222222222222L;
+
+#ifndef __ILP32__
+ float ff = 222222222222L; // expected-warning {{implicit conversion from 'long' to 'float' changes value from 222222222222 to 222222221312}}
+ float ffff = 222222222222UL; // expected-warning {{implicit conversion from 'unsigned long' to 'float' changes value from 222222222222 to 222222221312}}
+#else
+ float ff = 222222222222L; // expected-warning {{implicit conversion from 'long long' to 'float' changes value from 222222222222 to 222222221312}}
+ float ffff = 222222222222UL; // expected-warning {{implicit conversion from 'unsigned long long' to 'float' changes value from 222222222222 to 222222221312}}
+#endif
+
+ long l = 222222222222L;
+ float fff = l; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+}
+
+void testExpression() {
+ float a = 0.0f;
+
+#ifndef __ILP32__
+ float b = 222222222222L + a; // expected-warning {{implicit conversion from 'long' to 'float' changes value from 222222222222 to 222222221312}}
+#else
+ float b = 222222222222L + a; // expected-warning {{implicit conversion from 'long long' to 'float' changes value from 222222222222 to 222222221312}}
+#endif
+
+ float g = 22222222 + 22222222;
+ float c = 22222222 + 22222223; // expected-warning {{implicit conversion from 'int' to 'float' changes value from 44444445 to 44444444}}
+
+ int i = 0;
+ float d = i + a; // expected-warning {{implicit conversion from 'int' to 'float' may lose precision}}
+
+ double e = 0.0;
+ double f = i + e;
+}
+
+void testCNarrowing() {
+ // Since this is a C file. C++11 narrowing is not in effect.
+ // In this case, we should issue warnings.
+#ifndef __ILP32__
+ float a = {222222222222L}; // expected-warning {{implicit conversion from 'long' to 'float' changes value from 222222222222 to 222222221312}}
+#else
+ float a = {222222222222L}; // expected-warning {{implicit conversion from 'long long' to 'float' changes value from 222222222222 to 222222221312}}
+#endif
+
+ long b = 222222222222L;
+ float c = {b}; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+}
diff --git a/clang/test/Sema/implicit-int-float-narrowing.cpp b/clang/test/Sema/implicit-int-float-narrowing.cpp
new file mode 100644
index 00000000000..6de637e78c5
--- /dev/null
+++ b/clang/test/Sema/implicit-int-float-narrowing.cpp
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 %s -verify -Wno-conversion -Wno-c++11-narrowing -Wimplicit-int-float-conversion
+
+void testNoWarningOnNarrowing() {
+ // Test that we do not issue duplicated warnings for
+ // C++11 narrowing.
+ float a = {222222222222L}; // expected-no-diagnostics
+
+ long b = 222222222222L;
+ float c = {b}; // expected-no-diagnostics
+}
OpenPOWER on IntegriCloud