]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/14481 (strange warning when assigning to bitfield)
authorMark Mitchell <mark@codesourcery.com>
Wed, 17 Mar 2004 04:33:28 +0000 (04:33 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 17 Mar 2004 04:33:28 +0000 (04:33 +0000)
PR c++/14481
* fold-const.c (fold): Set TREE_NO_UNUSED_WARNING on implicitly
generated COMPOUND_EXPRs.

PR c++/14481
* g++.dg/warn/Wunused-7.C: New test.

From-SVN: r79570

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wunused-7.C [new file with mode: 0644]

index 9ecf9691070a0466885c1e785326ec390dc05317..894d105237ec1c4b9d7d341d3fe127f2946485e1 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-16  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/14481
+       * fold-const.c (fold): Set TREE_NO_UNUSED_WARNING on implicitly
+       generated COMPOUND_EXPRs.
+
 2004-03-16  Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
        * config/h8300/t-rtems (h8300-*-rtems*): New.
index 5e899fddc28b6df1f4c7c45aa6ac553f7d1d1de3..41683399f5c1250478a4328f1944e0ee03059136 100644 (file)
@@ -1392,7 +1392,7 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
       && ((hi == 0 && (HOST_WIDE_INT) low >= 0)
          || (hi == -1 && (HOST_WIDE_INT) low < 0))
       && overflow == 0 && ! TREE_OVERFLOW (arg1) && ! TREE_OVERFLOW (arg2))
-    return size_int_type_wide (low, type);
+    return size_int_type (low, type);
   else
     {
       t = build_int_2 (low, hi);
@@ -1598,7 +1598,7 @@ size_htab_eq (const void *x, const void *y)
 tree
 size_int_wide (HOST_WIDE_INT number, enum size_type_kind kind)
 {
-  return size_int_type_wide (number, sizetype_tab[(int) kind]);
+  return size_int_type (number, sizetype_tab[(int) kind]);
 }
 
 /* Likewise, but the desired type is specified explicitly.  */
@@ -1608,7 +1608,7 @@ static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
      htab_t size_htab;
 
 tree
-size_int_type_wide (HOST_WIDE_INT number, tree type)
+size_int_type_wide (HOST_WIDE_INT high, HOST_WIDE_INT low, tree type)
 {
   void **slot;
 
@@ -1621,8 +1621,8 @@ size_int_type_wide (HOST_WIDE_INT number, tree type)
   /* Adjust NEW_CONST to be the constant we want.  If it's already in the
      hash table, we return the value from the hash table.  Otherwise, we
      place that in the hash table and make a new node for the next time.  */
-  TREE_INT_CST_LOW (new_const) = number;
-  TREE_INT_CST_HIGH (new_const) = number < 0 ? -1 : 0;
+  TREE_INT_CST_LOW (new_const) = low;
+  TREE_INT_CST_HIGH (new_const) = high;
   TREE_TYPE (new_const) = type;
   TREE_OVERFLOW (new_const) = TREE_CONSTANT_OVERFLOW (new_const)
     = force_fit_type (new_const, 0);
@@ -1745,7 +1745,7 @@ fold_convert_const (enum tree_code code, tree type, tree arg1)
          if (TREE_CODE (type) == INTEGER_TYPE && TYPE_IS_SIZETYPE (type)
              && !TREE_CONSTANT_OVERFLOW (arg1)
              && compare_tree_int (arg1, 10000) < 0)
-           return size_int_type_wide (TREE_INT_CST_LOW (arg1), type);
+           return size_int_type (TREE_INT_CST_LOW (arg1), type);
 
          /* Given an integer constant, make new constant with new type,
             appropriately sign-extended or truncated.  */
@@ -5749,6 +5749,7 @@ fold (tree expr)
          TREE_OPERAND (t, 0) = TREE_OPERAND (prev, 1);
          /* First do the assignment, then return converted constant.  */
          t = build (COMPOUND_EXPR, TREE_TYPE (t), prev, fold (t));
+         TREE_NO_UNUSED_WARNING (t) = 1;
          TREE_USED (t) = 1;
          return t;
        }
index e5df14eba575dfde58535da97fb69328be65dc08..029201beaf6a4894a10c78d1de798a36bb026a08 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-16  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/14481
+       * g++.dg/warn/Wunused-7.C: New test.
+
 2004-03-16  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * gcc.dg/torture/builtin-integral-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-7.C b/gcc/testsuite/g++.dg/warn/Wunused-7.C
new file mode 100644 (file)
index 0000000..4281bc8
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/14481
+// { dg-options "-Wunused" }
+
+void func()
+{
+  struct mybitfields {
+    unsigned int s_field:8;
+  };
+  struct mybitfields s;
+  s.s_field = 255;
+};
+