diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2007-03-04 23:29:41 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2007-03-04 23:29:41 +0000 |
commit | f73fe417bc5556b2ab098e22cb6436b9b26c0577 (patch) | |
tree | b5345e046ddd0c7cfef6c82973f5e694a3fbb99e /gcc | |
parent | af13a7a6ec9a50c39948ee5631a47c29c84fc6d1 (diff) | |
download | gcc-f73fe417bc5556b2ab098e22cb6436b9b26c0577.zip gcc-f73fe417bc5556b2ab098e22cb6436b9b26c0577.tar.gz gcc-f73fe417bc5556b2ab098e22cb6436b9b26c0577.tar.bz2 |
re PR other/30465 (Duplicated overflow warning)
2007-03-04 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR other/30465
* c-common.c (convert_and_check): Don't give warnings for
conversion if 'expr' already overflowed.
testsuite/
* gcc.dg/multiple-overflow-warn-3.c: New.
* g++.dg/warn/multiple-overflow-warn-3.C: New.
From-SVN: r122534
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-common.c | 31 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c | 12 |
5 files changed, 50 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2646f34..47b83c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-03-04 Manuel Lopez-Ibanez <manu@gcc.gnu.org> + + PR other/30465 + * c-common.c (convert_and_check): Don't give warnings for + conversion if 'expr' already overflowed. + 2007-03-04 Roger Sayle <roger@eyesopen.com> PR middle-end/30744 diff --git a/gcc/c-common.c b/gcc/c-common.c index 6ea3800..523ef46 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -1250,10 +1250,9 @@ convert_and_check (tree type, tree expr) result = convert (type, expr); - if (skip_evaluation) + if (skip_evaluation || TREE_OVERFLOW_P (expr)) return result; - if (TREE_CODE (expr) == INTEGER_CST && (TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == ENUMERAL_TYPE) @@ -1274,21 +1273,19 @@ convert_and_check (tree type, tree expr) else if (warn_conversion) conversion_warning (type, expr); } - else - { - if (!int_fits_type_p (expr, c_common_unsigned_type (type))) - warning (OPT_Woverflow, - "overflow in implicit constant conversion"); - /* No warning for converting 0x80000000 to int. */ - else if (pedantic - && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE - || TYPE_PRECISION (TREE_TYPE (expr)) - != TYPE_PRECISION (type))) - warning (OPT_Woverflow, - "overflow in implicit constant conversion"); - else if (warn_conversion) - conversion_warning (type, expr); - } + else if (!int_fits_type_p (expr, c_common_unsigned_type (type))) + warning (OPT_Woverflow, + "overflow in implicit constant conversion"); + /* No warning for converting 0x80000000 to int. */ + else if (pedantic + && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE + || TYPE_PRECISION (TREE_TYPE (expr)) + != TYPE_PRECISION (type))) + warning (OPT_Woverflow, + "overflow in implicit constant conversion"); + + else if (warn_conversion) + conversion_warning (type, expr); } else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result)) warning (OPT_Woverflow, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 258f2f2..84c2d21 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-03-04 Manuel Lopez-Ibanez <manu@gcc.gnu.org> + + PR other/30465 + * gcc.dg/multiple-overflow-warn-3.c: New. + * g++.dg/warn/multiple-overflow-warn-3.C: New. + 2007-03-04 Simon Martin <simartin@users.sourceforge.net> PR c++/30895 diff --git a/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C b/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C new file mode 100644 index 0000000..491f7af --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C @@ -0,0 +1,12 @@ +/* PR 30465 : Test for duplicated warnings in a conversion. */ +/* { dg-do compile } */ +/* { dg-options "-Woverflow" } */ + +wchar_t +g (void) +{ + wchar_t wc = ((wchar_t)1 << 31) - 1; /* { dg-bogus "overflow .* overflow" } */ + /* { dg-warning "overflow" "" { target *-*-* } 8 } */ + return wc; +} + diff --git a/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c b/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c new file mode 100644 index 0000000..afb4e51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c @@ -0,0 +1,12 @@ +/* PR 30465 : Test for duplicated warnings in a conversion. */ +/* { dg-do compile } */ +/* { dg-options "-Woverflow" } */ + +short int +g (void) +{ + short int wc = ((short int)1 << 31) - 1; /* { dg-bogus "overflow .* overflow" } */ + /* { dg-warning "overflow" "" { target *-*-* } 8 } */ + return wc; +} + |