diff options
author | Marek Polacek <polacek@redhat.com> | 2015-07-20 13:43:45 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2015-07-20 13:43:45 +0000 |
commit | 451b5e4830e34b0ee1ae8af9fe3de4afe2fc5631 (patch) | |
tree | 42f1e133920c2d40c48b5953fe8ca2e817aae347 /gcc/cp | |
parent | 7040e90366fe1e8d4d78564335f3b3ea8e55234b (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 3 |
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; |