aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/Wconversion-real-integer.c
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2006-11-24 01:50:33 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2006-11-24 01:50:33 +0000
commit422c3a54ea4ba93eb21c1a6c72c42bd804665646 (patch)
tree5f5522ac3829784d28af2cccffb6ea3878cf5875 /gcc/testsuite/gcc.dg/Wconversion-real-integer.c
parent2941f691d916975ce707918ef42b22b928a4a11f (diff)
downloadgcc-422c3a54ea4ba93eb21c1a6c72c42bd804665646.zip
gcc-422c3a54ea4ba93eb21c1a6c72c42bd804665646.tar.gz
gcc-422c3a54ea4ba93eb21c1a6c72c42bd804665646.tar.bz2
re PR c/2707 (gcc does not warn on truncate)
2006-11-24 Manuel Lopez-Ibanez <manu@gcc.gnu.org> PR c/2707 PR c++/26167 * c-common.c (conversion_warning): New. (convert_and_check): Call conversion_warning unless there is an overflow warning. * doc/invoke.texi (-Wconversion): Update description. testsuite/ * gcc.dg/Wconversion-integer.c: New. Supersedes Wconversion-negative-constants.c * gcc.dg/Wconversion-real.c: New. * gcc.dg/Wconversion-real-integer.c: New. * gcc.dg/Wconversion-negative-constants.c: Deleted. * g++.dg/warn/Wconversion1.C: Modified. From-SVN: r119143
Diffstat (limited to 'gcc/testsuite/gcc.dg/Wconversion-real-integer.c')
-rw-r--r--gcc/testsuite/gcc.dg/Wconversion-real-integer.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/Wconversion-real-integer.c b/gcc/testsuite/gcc.dg/Wconversion-real-integer.c
new file mode 100644
index 0000000..5911f6a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wconversion-real-integer.c
@@ -0,0 +1,72 @@
+/* Test for diagnostics for Wconversion between floating-point and
+ integers. */
+
+/* { dg-do compile }
+/* { dg-options "-std=c99 -Wconversion" } */
+
+#include <limits.h>
+
+void fsi (signed int x);
+void fui (unsigned int x);
+void ffloat (float x);
+void fdouble (double x);
+
+float vfloat;
+double vdouble;
+
+void h (void)
+{
+ unsigned int ui = 3;
+ int si = 3;
+ unsigned char uc = 3;
+ signed char sc = 3;
+ float f = 3;
+ double d = 3;
+
+ fsi (3.1f); /* { dg-warning "conversion" } */
+ si = 3.1f; /* { dg-warning "conversion" } */
+ fsi (3.1); /* { dg-warning "conversion" } */
+ si = 3.1; /* { dg-warning "conversion" } */
+ fsi (d); /* { dg-warning "conversion" } */
+ si = d; /* { dg-warning "conversion" } */
+ fui (-1.0); /* { dg-warning "overflow" } */
+ ui = -1.0; /* { dg-warning "overflow" } */
+ ffloat (INT_MAX); /* { dg-warning "conversion" } */
+ vfloat = INT_MAX; /* { dg-warning "conversion" } */
+ ffloat (16777217); /* { dg-warning "conversion" } */
+ vfloat = 16777217; /* { dg-warning "conversion" } */
+ ffloat (si); /* { dg-warning "conversion" } */
+ vfloat = si; /* { dg-warning "conversion" } */
+ ffloat (ui); /* { dg-warning "conversion" } */
+ vfloat = ui; /* { dg-warning "conversion" } */
+
+ fsi (3);
+ si = 3;
+ fsi (3.0f);
+ si = 3.0f;
+ fsi (3.0);
+ si = 3.0;
+ fsi (16777217.0f);
+ si = 16777217.0f;
+ fsi ((int) 3.1);
+ si = (int) 3.1;
+ ffloat (3U);
+ vfloat = 3U;
+ ffloat (3);
+ vfloat = 3;
+ ffloat (INT_MIN);
+ vfloat = INT_MIN;
+ ffloat (uc);
+ vfloat = uc;
+ ffloat (sc);
+ vfloat = sc;
+
+ fdouble (UINT_MAX);
+ vdouble = UINT_MAX;
+ fdouble (ui);
+ vdouble = ui;
+ fdouble (si);
+ vdouble = si;
+}
+
+