aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-05-01 04:27:15 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-05-01 04:27:15 +0000
commit71834ad346a514c1ef41342403b762503e5ce05e (patch)
treee7d7d2ba340760ae4cb7b524b8aab06e994b8769 /gcc
parent1c56bc4a7ea665c876311f1df1658aa19107f93f (diff)
downloadgcc-71834ad346a514c1ef41342403b762503e5ce05e.zip
gcc-71834ad346a514c1ef41342403b762503e5ce05e.tar.gz
gcc-71834ad346a514c1ef41342403b762503e5ce05e.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/c-common.c16
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/Woverflow-1.c7
-rw-r--r--gcc/testsuite/gcc.dg/Woverflow-2.c7
-rw-r--r--gcc/testsuite/gcc.dg/Woverflow-3.c7
8 files changed, 56 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 49d9638..bc5e24f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 35982e5..5e54660 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -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);
diff --git a/gcc/common.opt b/gcc/common.opt
index f14a1cf..53836f3 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -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
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 5dcf70b..3e523d4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b9ca4cf..1aeb5ac 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/Woverflow-1.c b/gcc/testsuite/gcc.dg/Woverflow-1.c
new file mode 100644
index 0000000..064af45
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Woverflow-1.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <limits.h>
+
+int foo = INT_MAX + 1; /* { dg-warning "integer overflow" } */
+
diff --git a/gcc/testsuite/gcc.dg/Woverflow-2.c b/gcc/testsuite/gcc.dg/Woverflow-2.c
new file mode 100644
index 0000000..44368b6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Woverflow-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Woverflow" } */
+
+#include <limits.h>
+
+int foo = INT_MAX + 1; /* { dg-warning "integer overflow" } */
+
diff --git a/gcc/testsuite/gcc.dg/Woverflow-3.c b/gcc/testsuite/gcc.dg/Woverflow-3.c
new file mode 100644
index 0000000..73a021b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Woverflow-3.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wno-overflow" } */
+
+#include <limits.h>
+
+int foo = INT_MAX + 1;
+