diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2006-11-24 01:50:33 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2006-11-24 01:50:33 +0000 |
commit | 422c3a54ea4ba93eb21c1a6c72c42bd804665646 (patch) | |
tree | 5f5522ac3829784d28af2cccffb6ea3878cf5875 /gcc/testsuite/gcc.dg/Wconversion-real-integer.c | |
parent | 2941f691d916975ce707918ef42b22b928a4a11f (diff) | |
download | gcc-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.c | 72 |
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; +} + + |