common.opt (Woverflow): New command line option.
* common.opt (Woverflow): New command line option. * c-common.c (constant_expression_warning): Check warn_overflow. (overflow_waring): Pass OPT_Woverflow to warning. (unsigned_conversion_warning): Likewise. (convert_and_check): Likewise. * doc/invoke.texi: Document new command line option. * gcc.dg/Woverflow-1.c: New test case. * gcc.dg/Woverflow-2.c: Likewise. * gcc.dg/Woverflow-3.c: Likewise. From-SVN: r113408
This commit is contained in:
parent
1c56bc4a7e
commit
71834ad346
8 changed files with 56 additions and 7 deletions
|
@ -1,3 +1,12 @@
|
|||
2006-04-30 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* common.opt (Woverflow): New command line option.
|
||||
* c-common.c (constant_expression_warning): Check warn_overflow.
|
||||
(overflow_waring): Pass OPT_Woverflow to warning.
|
||||
(unsigned_conversion_warning): Likewise.
|
||||
(convert_and_check): Likewise.
|
||||
* doc/invoke.texi: Document new command line option.
|
||||
|
||||
2006-04-30 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_override_options): Enable
|
||||
|
|
|
@ -906,7 +906,9 @@ constant_expression_warning (tree value)
|
|||
if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
|
||||
|| TREE_CODE (value) == VECTOR_CST
|
||||
|| TREE_CODE (value) == COMPLEX_CST)
|
||||
&& TREE_CONSTANT_OVERFLOW (value) && pedantic)
|
||||
&& TREE_CONSTANT_OVERFLOW (value)
|
||||
&& warn_overflow
|
||||
&& pedantic)
|
||||
pedwarn ("overflow in constant expression");
|
||||
}
|
||||
|
||||
|
@ -927,7 +929,7 @@ overflow_warning (tree value)
|
|||
{
|
||||
TREE_OVERFLOW (value) = 0;
|
||||
if (skip_evaluation == 0)
|
||||
warning (0, "integer overflow in expression");
|
||||
warning (OPT_Woverflow, "integer overflow in expression");
|
||||
}
|
||||
else if ((TREE_CODE (value) == REAL_CST
|
||||
|| (TREE_CODE (value) == COMPLEX_CST
|
||||
|
@ -936,13 +938,13 @@ overflow_warning (tree value)
|
|||
{
|
||||
TREE_OVERFLOW (value) = 0;
|
||||
if (skip_evaluation == 0)
|
||||
warning (0, "floating point overflow in expression");
|
||||
warning (OPT_Woverflow, "floating point overflow in expression");
|
||||
}
|
||||
else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
|
||||
{
|
||||
TREE_OVERFLOW (value) = 0;
|
||||
if (skip_evaluation == 0)
|
||||
warning (0, "vector overflow in expression");
|
||||
warning (OPT_Woverflow, "vector overflow in expression");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -964,7 +966,8 @@ unsigned_conversion_warning (tree result, tree operand)
|
|||
{
|
||||
if (!int_fits_type_p (operand, c_common_signed_type (type)))
|
||||
/* This detects cases like converting -129 or 256 to unsigned char. */
|
||||
warning (0, "large integer implicitly truncated to unsigned type");
|
||||
warning (OPT_Woverflow,
|
||||
"large integer implicitly truncated to unsigned type");
|
||||
else
|
||||
warning (OPT_Wconversion,
|
||||
"negative integer implicitly converted to unsigned type");
|
||||
|
@ -1093,7 +1096,8 @@ convert_and_check (tree type, tree expr)
|
|||
|| !constant_fits_type_p (expr,
|
||||
c_common_unsigned_type (type)))
|
||||
&& skip_evaluation == 0)
|
||||
warning (0, "overflow in implicit constant conversion");
|
||||
warning (OPT_Woverflow,
|
||||
"overflow in implicit constant conversion");
|
||||
}
|
||||
else
|
||||
unsigned_conversion_warning (t, expr);
|
||||
|
|
|
@ -109,6 +109,10 @@ Wmissing-noreturn
|
|||
Common Var(warn_missing_noreturn)
|
||||
Warn about functions which might be candidates for __attribute__((noreturn))
|
||||
|
||||
Woverflow
|
||||
Common Var(warn_overflow) Init(1)
|
||||
Warn about overflow in arithmetic expressions
|
||||
|
||||
Wpacked
|
||||
Common Var(warn_packed)
|
||||
Warn when the packed attribute has no effect on struct layout
|
||||
|
|
|
@ -238,7 +238,8 @@ Objective-C and Objective-C++ Dialects}.
|
|||
-Wmain -Wmissing-braces -Wmissing-field-initializers @gol
|
||||
-Wmissing-format-attribute -Wmissing-include-dirs @gol
|
||||
-Wmissing-noreturn @gol
|
||||
-Wno-multichar -Wnonnull -Woverlength-strings -Wpacked -Wpadded @gol
|
||||
-Wno-multichar -Wnonnull -Wno-overflow @gol
|
||||
-Woverlength-strings -Wpacked -Wpadded @gol
|
||||
-Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast @gol
|
||||
-Wredundant-decls @gol
|
||||
-Wreturn-type -Wsequence-point -Wshadow @gol
|
||||
|
@ -3284,6 +3285,10 @@ deprecated by using the @code{deprecated} attribute.
|
|||
(@pxref{Function Attributes}, @pxref{Variable Attributes},
|
||||
@pxref{Type Attributes}.)
|
||||
|
||||
@item -Wno-overflow
|
||||
@opindex Wno-overflow
|
||||
Do not warn about compile-time overflow in constant expressions.
|
||||
|
||||
@item -Wpacked
|
||||
@opindex Wpacked
|
||||
Warn if a structure is given the packed attribute, but the packed
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2006-04-30 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* gcc.dg/Woverflow-1.c: New test case.
|
||||
* gcc.dg/Woverflow-2.c: Likewise.
|
||||
* gcc.dg/Woverflow-3.c: Likewise.
|
||||
|
||||
2006-04-30 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27094
|
||||
|
|
7
gcc/testsuite/gcc.dg/Woverflow-1.c
Normal file
7
gcc/testsuite/gcc.dg/Woverflow-1.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
int foo = INT_MAX + 1; /* { dg-warning "integer overflow" } */
|
||||
|
7
gcc/testsuite/gcc.dg/Woverflow-2.c
Normal file
7
gcc/testsuite/gcc.dg/Woverflow-2.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Woverflow" } */
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
int foo = INT_MAX + 1; /* { dg-warning "integer overflow" } */
|
||||
|
7
gcc/testsuite/gcc.dg/Woverflow-3.c
Normal file
7
gcc/testsuite/gcc.dg/Woverflow-3.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wno-overflow" } */
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
int foo = INT_MAX + 1;
|
||||
|
Loading…
Add table
Reference in a new issue