aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2015-07-20 13:43:45 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2015-07-20 13:43:45 +0000
commit451b5e4830e34b0ee1ae8af9fe3de4afe2fc5631 (patch)
tree42f1e133920c2d40c48b5953fe8ca2e817aae347 /gcc/cp
parent7040e90366fe1e8d4d78564335f3b3ea8e55234b (diff)
downloadgcc-451b5e4830e34b0ee1ae8af9fe3de4afe2fc5631.zip
gcc-451b5e4830e34b0ee1ae8af9fe3de4afe2fc5631.tar.gz
gcc-451b5e4830e34b0ee1ae8af9fe3de4afe2fc5631.tar.bz2
re PR c++/55095 (Wshift-overflow)
PR c++/55095 * c-common.c (c_fully_fold_internal): Warn about left shift overflows. Use EXPR_LOC_OR_LOC. (maybe_warn_shift_overflow): New function. * c-common.h (maybe_warn_shift_overflow): Declare. * c-opts.c (c_common_post_options): Set warn_shift_overflow. * c.opt (Wshift-overflow): New option. * c-typeck.c (digest_init): Pass OPT_Wpedantic to pedwarn_init. (build_binary_op): Warn about left shift overflows. * typeck.c (cp_build_binary_op): Warn about left shift overflows. * doc/invoke.texi: Document -Wshift-overflow and -Wshift-overflow=. * c-c++-common/Wshift-overflow-1.c: New test. * c-c++-common/Wshift-overflow-2.c: New test. * c-c++-common/Wshift-overflow-3.c: New test. * c-c++-common/Wshift-overflow-4.c: New test. * c-c++-common/Wshift-overflow-5.c: New test. * g++.dg/cpp1y/left-shift-1.C: New test. * gcc.dg/c90-left-shift-2.c: New test. * gcc.dg/c90-left-shift-3.c: New test. * gcc.dg/c99-left-shift-2.c: New test. * gcc.dg/c99-left-shift-3.c: New test. * gcc.dg/pr40501.c: Use -Wno-shift-overflow. * gcc.c-torture/execute/pr40386.c: Likewise. * gcc.dg/vect/pr33373.c: Likewise. * gcc.dg/vect/vect-shift-2-big-array.c: Likewise. * gcc.dg/vect/vect-shift-2.c: Likewise. Co-Authored-By: Richard Sandiford <richard.sandiford@arm.com> From-SVN: r225998
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c3
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6b92826..b72b22f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-20 Marek Polacek <polacek@redhat.com>
+
+ PR c++/55095
+ * typeck.c (cp_build_binary_op): Warn about left shift overflows.
+
2015-07-15 Jason Merrill <jason@redhat.com>
PR c++/65091
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 3e252f9..b88a3fd 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -4350,6 +4350,9 @@ cp_build_binary_op (location_t location,
warning (OPT_Wshift_count_overflow,
"left shift count >= width of type");
}
+ else if (TREE_CODE (const_op0) == INTEGER_CST
+ && (complain & tf_warning))
+ maybe_warn_shift_overflow (location, const_op0, const_op1);
}
/* Avoid converting op1 to result_type later. */
converted = 1;