invoke.texi ([-Wshift-count-negative, [...]): Add.
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 10 Nov 2014 20:14:41 +0000 (20:14 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 10 Nov 2014 20:14:41 +0000 (20:14 +0000)
2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>

* doc/invoke.texi ([-Wshift-count-negative, -Wshift-count-overflow]):
Add.

/c-family
2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>

* c.opt ([Wshift-count-negative, Wshift-count-overflow]): Add.

/cp
2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>

* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and
OPT_Wshift_count_overflow in the warnings.

/c
2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>

* c-typeck.c (build_binary_op): Use OPT_Wshift_count_negative and
OPT_Wshift_count_overflow in the warnings.

/testsuite
2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>

* c-c++-common/Wshift-count-overflow-1.c: New.
* c-c++-common/Wshift-count-overflow-2.c: Likewise.
* c-c++-common/Wshift-count-negative-1.c: Likewise.
* c-c++-common/Wshift-count-negative-2.c: Likewise.

From-SVN: r217313

13 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/Wshift-count-negative-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/Wshift-count-negative-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/Wshift-count-overflow-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/Wshift-count-overflow-2.c [new file with mode: 0644]

index 95ad903b165588c6ab57772a09000adc96d3c033..6432b529097c08fcc4f2bdf1258b2a829c45df1a 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * doc/invoke.texi ([-Wshift-count-negative, -Wshift-count-overflow]):
+       Add.
+
 2014-11-10  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/frv/frv.c (frv_io_handle_use_1): Delete.
index f2295ed63985d099a7262944e0840a1f19fd3d4c..f0fa714cfbc4863c9a4a3653ee0555dd2c8e8f9d 100644 (file)
@@ -1,3 +1,7 @@
+2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * c.opt ([Wshift-count-negative, Wshift-count-overflow]): Add.
+
 2014-11-10  Edward Smith-Rowland  <3dw4rd@verizon.net>
 
        * c-cppbuiltin.c (__has_attribute, __has_cpp_attribute): New macros;
index 66c62fb6424367224c8da0008e19f9644e74a8b8..85dcb98b6a635cc5985333f025f5020aed3f4ce3 100644 (file)
@@ -760,13 +760,21 @@ Wselector
 ObjC ObjC++ Var(warn_selector) Warning
 Warn if a selector has multiple methods
 
+Wsequence-point
+C ObjC C++ ObjC++ Var(warn_sequence_point) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
+Warn about possible violations of sequence point rules
+
 Wshadow-ivar
 ObjC ObjC++ Var(warn_shadow_ivar) EnabledBy(Wshadow) Init(1) Warning
 Warn if a local declaration hides an instance variable
 
-Wsequence-point
-C ObjC C++ ObjC++ Var(warn_sequence_point) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
-Warn about possible violations of sequence point rules
+Wshift-count-negative
+C ObjC C++ ObjC++ Var(warn_shift_count_negative) Init(1) Warning
+Warn if shift count is negative
+
+Wshift-count-overflow
+C ObjC C++ ObjC++ Var(warn_shift_count_overflow) Init(1) Warning
+Warn if shift count >= width of type
 
 Wsign-compare
 C ObjC C++ ObjC++ Var(warn_sign_compare) Warning LangEnabledBy(C++ ObjC++,Wall)
index 24781e1b7a2198b091f89c60b0e5cd82eb20cae7..a2b3c78fec009cde5db3801c1dc62ad46e7d8fe8 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * c-typeck.c (build_binary_op): Use OPT_Wshift_count_negative and
+       OPT_Wshift_count_overflow in the warnings.
+
 2014-10-30  Marek Polacek  <polacek@redhat.com>
 
        * c-objc-common.c (c_tree_printer) <case 'T'>: For a typedef name,
index 79dbc3dff91c62c69649aa527291710f0536f894..77ce549ca150a69795e6d7f9115136d096c2eef3 100644 (file)
@@ -10491,7 +10491,8 @@ build_binary_op (location_t location, enum tree_code code,
                {
                  int_const = false;
                  if (c_inhibit_evaluation_warnings == 0)
-                   warning_at (location, 0, "right shift count is negative");
+                   warning_at (location, OPT_Wshift_count_negative,
+                               "right shift count is negative");
                }
              else
                {
@@ -10502,8 +10503,8 @@ build_binary_op (location_t location, enum tree_code code,
                    {
                      int_const = false;
                      if (c_inhibit_evaluation_warnings == 0)
-                       warning_at (location, 0, "right shift count >= width "
-                                   "of type");
+                       warning_at (location, OPT_Wshift_count_overflow,
+                                   "right shift count >= width of type");
                    }
                }
            }
@@ -10545,15 +10546,16 @@ build_binary_op (location_t location, enum tree_code code,
                {
                  int_const = false;
                  if (c_inhibit_evaluation_warnings == 0)
-                   warning_at (location, 0, "left shift count is negative");
+                   warning_at (location, OPT_Wshift_count_negative,
+                               "left shift count is negative");
                }
 
              else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
                {
                  int_const = false;
                  if (c_inhibit_evaluation_warnings == 0)
-                   warning_at (location, 0, "left shift count >= width of "
-                               "type");
+                   warning_at (location, OPT_Wshift_count_overflow,
+                               "left shift count >= width of type");
                }
            }
 
index dd0dc2f76d9e273e6ca7aa6b6d879d982ba42c53..22b013ed7a2db9b8eb066a53046e84d355aa6900 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and
+       OPT_Wshift_count_overflow in the warnings.
+
 2014-11-09  Jason Merrill  <jason@redhat.com>
 
        DR 799
index d0f5ccdc07ac3e42ad03ab8f6ad5d2fe4c9bc767..1f443ef0b1d4a1a7fe1b7d1966b58f9fee990507 100644 (file)
@@ -4280,14 +4280,16 @@ cp_build_binary_op (location_t location,
                {
                  if ((complain & tf_warning)
                      && c_inhibit_evaluation_warnings == 0)
-                   warning (0, "right shift count is negative");
+                   warning (OPT_Wshift_count_negative,
+                            "right shift count is negative");
                }
              else
                {
                  if (compare_tree_int (const_op1, TYPE_PRECISION (type0)) >= 0
                      && (complain & tf_warning)
                      && c_inhibit_evaluation_warnings == 0)
-                   warning (0, "right shift count >= width of type");
+                   warning (OPT_Wshift_count_overflow,
+                            "right shift count >= width of type");
                }
            }
          /* Convert the shift-count to an integer, regardless of
@@ -4328,14 +4330,16 @@ cp_build_binary_op (location_t location,
                {
                  if ((complain & tf_warning)
                      && c_inhibit_evaluation_warnings == 0)
-                   warning (0, "left shift count is negative");
+                   warning (OPT_Wshift_count_negative,
+                            "left shift count is negative");
                }
              else if (compare_tree_int (const_op1,
                                         TYPE_PRECISION (type0)) >= 0)
                {
                  if ((complain & tf_warning)
                      && c_inhibit_evaluation_warnings == 0)
-                   warning (0, "left shift count >= width of type");
+                   warning (OPT_Wshift_count_overflow,
+                            "left shift count >= width of type");
                }
            }
          /* Convert the shift-count to an integer, regardless of
index 57666dbdb51ec78a79cc46e9b11c2ed19b9095fe..cd20b6e3784b3d96e202a5bed2dc8aac44d5aa46 100644 (file)
@@ -269,6 +269,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
 -Wredundant-decls  -Wno-return-local-addr @gol
 -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar @gol
+-Wshift-count-negative -Wshift-count-overflow @gol
 -Wsign-compare  -Wsign-conversion -Wfloat-conversion @gol
 -Wsizeof-pointer-memaccess  -Wsizeof-array-argument @gol
 -Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol
@@ -3825,6 +3826,16 @@ exceptions are @samp{main} and functions defined in system headers.
 
 This warning is enabled by @option{-Wall}.
 
+@item -Wshift-count-negative
+@opindex Wshift-count-negative
+@opindex Wno-shift-count-negative
+Warn if shift count is negative. This warning is enabled by default.
+
+@item -Wshift-count-overflow
+@opindex Wshift-count-overflow
+@opindex Wno-shift-count-overflow
+Warn if shift count >= width of type. This warning is enabled by default.
+
 @item -Wswitch
 @opindex Wswitch
 @opindex Wno-switch
index f14bb77885ff6a82d8c8935a117d831e8a449e45..b84213889d20b6a309c6db0327f7495c06148920 100644 (file)
@@ -1,3 +1,10 @@
+2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * c-c++-common/Wshift-count-overflow-1.c: New.
+       * c-c++-common/Wshift-count-overflow-2.c: Likewise.
+       * c-c++-common/Wshift-count-negative-1.c: Likewise.
+       * c-c++-common/Wshift-count-negative-2.c: Likewise.
+
 2014-11-10  Andreas Tobler  <andreast@gcc.gnu.org>
 
        * gcc.dg/fshort-wchar.c: Use arm_eabi instead of arm*-*-*eabi*.
diff --git a/gcc/testsuite/c-c++-common/Wshift-count-negative-1.c b/gcc/testsuite/c-c++-common/Wshift-count-negative-1.c
new file mode 100644 (file)
index 0000000..d883393
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wshift-count-negative" } */
+
+void foo()
+{
+  unsigned i1 = 1U << -1; /* { dg-warning "left shift count is negative" } */
+  unsigned i2 = 1U >> -1; /* { dg-warning "right shift count is negative" } */
+}
diff --git a/gcc/testsuite/c-c++-common/Wshift-count-negative-2.c b/gcc/testsuite/c-c++-common/Wshift-count-negative-2.c
new file mode 100644 (file)
index 0000000..91c7129
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wno-shift-count-negative" } */
+
+void foo()
+{
+  unsigned i1 = 1U << -1;
+  unsigned i2 = 1U >> -1;
+}
diff --git a/gcc/testsuite/c-c++-common/Wshift-count-overflow-1.c b/gcc/testsuite/c-c++-common/Wshift-count-overflow-1.c
new file mode 100644 (file)
index 0000000..4d29d57
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wshift-count-overflow" } */
+
+void foo()
+{
+  unsigned i1 = 1U << (sizeof(unsigned) * __CHAR_BIT__); /* { dg-warning "left shift count >= width of type" } */
+  unsigned i2 = 1U >> (sizeof(unsigned) * __CHAR_BIT__); /* { dg-warning "right shift count >= width of type" } */
+}
diff --git a/gcc/testsuite/c-c++-common/Wshift-count-overflow-2.c b/gcc/testsuite/c-c++-common/Wshift-count-overflow-2.c
new file mode 100644 (file)
index 0000000..92032c0
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wno-shift-count-overflow" } */
+
+void foo()
+{
+  unsigned i1 = 1U << (sizeof(unsigned) * __CHAR_BIT__);
+  unsigned i2 = 1U >> (sizeof(unsigned) * __CHAR_BIT__);
+}