mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 11:00:57 +08:00
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
This commit is contained in:
parent
af13a7a6ec
commit
f73fe417bc
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
12
gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C
Normal file
12
gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C
Normal file
@ -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;
|
||||
}
|
||||
|
12
gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
Normal file
12
gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
Normal file
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user