c-common.h (DECL_UNNAMED_BIT_FIELD): New.
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 2 Feb 2018 19:53:59 +0000 (19:53 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 2 Feb 2018 19:53:59 +0000 (19:53 +0000)
/c-family
2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>

* c-common.h (DECL_UNNAMED_BIT_FIELD): New.

/c
2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>

* c-typeck.c (really_start_incremental_init, push_init_level,
set_nonincremental_init, output_init_element, process_init_element):
Use DECL_UNNAMED_BIT_FIELD.

/cp
2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>

* class.c (is_really_empty_class): Use DECL_UNNAMED_BIT_FIELD.
* constexpr.c (cx_check_missing_mem_inits): Likewise.
* decl.c (next_initializable_field, find_decomp_class_base,
cp_finish_decomp): Likewise.
* typeck2.c (process_init_constructor_record): Likewise.

From-SVN: r257348

gcc/c-family/ChangeLog
gcc/c-family/c-common.h
gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/constexpr.c
gcc/cp/decl.c
gcc/cp/typeck2.c

index 5bbdd36db51b4bdc18d0b047c53c5255a700ed1a..02b2b1ab9ee537e675718987383ed23ee394afe7 100644 (file)
@@ -1,3 +1,7 @@
+2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * c-common.h (DECL_UNNAMED_BIT_FIELD): New.
+
 2018-02-02  Julia Koval  <julia.koval@intel.com>
 
        * c-common.h (omp_clause_mask): Move to wide_int_bitmask.h.
index aad01fa569eefc59ccb75554ac174ea9c31ed1ef..775d46893c3d60a990525d389e343e3e97f1cc8c 100644 (file)
@@ -940,6 +940,10 @@ extern void c_parse_final_cleanups (void);
 #define CLEAR_DECL_C_BIT_FIELD(NODE) \
   (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
 
+/* True if the decl was an unnamed bitfield.  */
+#define DECL_UNNAMED_BIT_FIELD(NODE) \
+  (DECL_C_BIT_FIELD (NODE) && !DECL_NAME (NODE))
+
 extern tree do_case (location_t, tree, tree);
 extern tree build_stmt (location_t, enum tree_code, ...);
 extern tree build_real_imag_expr (location_t, enum tree_code, tree);
index 561b58e82da85b69efb0fc6bc623fa608a6c5bdc..97ae43c40c6c7872e81baafde6f64efef1c63da0 100644 (file)
@@ -1,3 +1,9 @@
+2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * c-typeck.c (really_start_incremental_init, push_init_level,
+       set_nonincremental_init, output_init_element, process_init_element):
+       Use DECL_UNNAMED_BIT_FIELD.
+
 2018-01-31  Marek Polacek  <polacek@redhat.com>
 
        PR c/81779
index e22bc740bca15fba013ce0c5d658fafe979f1f3a..b35c2c06e08bcce0f63f44ac83da84395aabb975 100644 (file)
@@ -7955,8 +7955,7 @@ really_start_incremental_init (tree type)
       constructor_fields = TYPE_FIELDS (constructor_type);
       /* Skip any nameless bit fields at the beginning.  */
       while (constructor_fields != NULL_TREE
-            && DECL_C_BIT_FIELD (constructor_fields)
-            && DECL_NAME (constructor_fields) == NULL_TREE)
+            && DECL_UNNAMED_BIT_FIELD (constructor_fields))
        constructor_fields = DECL_CHAIN (constructor_fields);
 
       constructor_unfilled_fields = constructor_fields;
@@ -8161,8 +8160,7 @@ push_init_level (location_t loc, int implicit,
       constructor_fields = TYPE_FIELDS (constructor_type);
       /* Skip any nameless bit fields at the beginning.  */
       while (constructor_fields != NULL_TREE
-            && DECL_C_BIT_FIELD (constructor_fields)
-            && DECL_NAME (constructor_fields) == NULL_TREE)
+            && DECL_UNNAMED_BIT_FIELD (constructor_fields))
        constructor_fields = DECL_CHAIN (constructor_fields);
 
       constructor_unfilled_fields = constructor_fields;
@@ -8930,8 +8928,7 @@ set_nonincremental_init (struct obstack * braced_init_obstack)
       constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
       /* Skip any nameless bit fields at the beginning.  */
       while (constructor_unfilled_fields != NULL_TREE
-            && DECL_C_BIT_FIELD (constructor_unfilled_fields)
-            && DECL_NAME (constructor_unfilled_fields) == NULL_TREE)
+            && DECL_UNNAMED_BIT_FIELD (constructor_unfilled_fields))
        constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
 
     }
@@ -9300,8 +9297,7 @@ output_init_element (location_t loc, tree value, tree origtype,
 
       /* Skip any nameless bit fields.  */
       while (constructor_unfilled_fields != NULL_TREE
-            && DECL_C_BIT_FIELD (constructor_unfilled_fields)
-            && DECL_NAME (constructor_unfilled_fields) == NULL_TREE)
+            && DECL_UNNAMED_BIT_FIELD (constructor_unfilled_fields))
        constructor_unfilled_fields =
          DECL_CHAIN (constructor_unfilled_fields);
     }
@@ -9665,8 +9661,8 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
                  constructor_unfilled_fields = DECL_CHAIN (constructor_fields);
                  /* Skip any nameless bit fields.  */
                  while (constructor_unfilled_fields != 0
-                        && DECL_C_BIT_FIELD (constructor_unfilled_fields)
-                        && DECL_NAME (constructor_unfilled_fields) == 0)
+                        && (DECL_UNNAMED_BIT_FIELD
+                            (constructor_unfilled_fields)))
                    constructor_unfilled_fields =
                      DECL_CHAIN (constructor_unfilled_fields);
                }
@@ -9675,8 +9671,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
          constructor_fields = DECL_CHAIN (constructor_fields);
          /* Skip any nameless bit fields at the beginning.  */
          while (constructor_fields != NULL_TREE
-                && DECL_C_BIT_FIELD (constructor_fields)
-                && DECL_NAME (constructor_fields) == NULL_TREE)
+                && DECL_UNNAMED_BIT_FIELD (constructor_fields))
            constructor_fields = DECL_CHAIN (constructor_fields);
        }
       else if (TREE_CODE (constructor_type) == UNION_TYPE)
index 9c76f8e528e6d46a59ffd4e328bd88819f7850bd..0681826cd4c1135667f44ab8272875912e0d5387 100644 (file)
@@ -1,3 +1,11 @@
+2018-02-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * class.c (is_really_empty_class): Use DECL_UNNAMED_BIT_FIELD.
+       * constexpr.c (cx_check_missing_mem_inits): Likewise.
+       * decl.c (next_initializable_field, find_decomp_class_base,
+       cp_finish_decomp): Likewise.
+       * typeck2.c (process_init_constructor_record): Likewise.
+
 2018-02-02  Jason Merrill  <jason@redhat.com>
 
        PR c++/84181 - ICE with lambda parm in template argument.
index 4103630231ab509123fa43f2b7265fa9f76f59cc..a4098ac872eeb7a08950d20acd91741961f6b140 100644 (file)
@@ -8202,7 +8202,7 @@ is_really_empty_class (tree type)
        if (TREE_CODE (field) == FIELD_DECL
            && !DECL_ARTIFICIAL (field)
            /* An unnamed bit-field is not a data member.  */
-           && (DECL_NAME (field) || !DECL_C_BIT_FIELD (field))
+           && !DECL_UNNAMED_BIT_FIELD (field)
            && !is_really_empty_class (TREE_TYPE (field)))
          return false;
       return true;
index 171c389515a40ce3816d5d33767547b77257946a..93dd8ae049c3d6957c10988dacd1e358c17605df 100644 (file)
@@ -783,7 +783,7 @@ cx_check_missing_mem_inits (tree ctype, tree body, bool complain)
          tree ftype;
          if (TREE_CODE (field) != FIELD_DECL)
            continue;
-         if (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
+         if (DECL_UNNAMED_BIT_FIELD (field))
            continue;
          if (DECL_ARTIFICIAL (field))
            continue;
index 244a3efe831f55c4d8a937a20a1988f3c3b9cc7c..01ce9fb6d6992dd2872fbb6a9c729046dbf30592 100644 (file)
@@ -5634,7 +5634,7 @@ next_initializable_field (tree field)
 {
   while (field
         && (TREE_CODE (field) != FIELD_DECL
-            || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
+            || DECL_UNNAMED_BIT_FIELD (field)
             || (DECL_ARTIFICIAL (field)
                 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
     field = DECL_CHAIN (field);
@@ -7208,7 +7208,7 @@ find_decomp_class_base (location_t loc, tree type, tree ret)
   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
     if (TREE_CODE (field) != FIELD_DECL
        || DECL_ARTIFICIAL (field)
-       || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
+       || DECL_UNNAMED_BIT_FIELD (field))
       continue;
     else if (ret)
       return type;
@@ -7646,7 +7646,7 @@ cp_finish_decomp (tree decl, tree first, unsigned int count)
       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
        if (TREE_CODE (field) != FIELD_DECL
            || DECL_ARTIFICIAL (field)
-           || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
+           || DECL_UNNAMED_BIT_FIELD (field))
          continue;
        else
          eltscnt++;
@@ -7663,7 +7663,7 @@ cp_finish_decomp (tree decl, tree first, unsigned int count)
       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
        if (TREE_CODE (field) != FIELD_DECL
            || DECL_ARTIFICIAL (field)
-           || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field)))
+           || DECL_UNNAMED_BIT_FIELD (field))
          continue;
        else
          {
index 8cb0e8811d355f5a7a8da917d6bd3616908f4fc6..899d60e8535d2a61e65f8a56d8ec808099d7a083 100644 (file)
@@ -1395,14 +1395,14 @@ process_init_constructor_record (tree type, tree init, int nested,
       tree next;
       tree type;
 
-      if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
-       continue;
-
       if (TREE_CODE (field) != FIELD_DECL
          || (DECL_ARTIFICIAL (field)
              && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field))))
        continue;
 
+      if (DECL_UNNAMED_BIT_FIELD (field))
+       continue;
+
       /* If this is a bitfield, first convert to the declared type.  */
       type = TREE_TYPE (field);
       if (DECL_BIT_FIELD_TYPE (field))
@@ -1547,14 +1547,15 @@ process_init_constructor_record (tree type, tree init, int nested,
              for (field = TYPE_FIELDS (type);
                   field; field = DECL_CHAIN (field))
                {
-                 if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
-                   continue;
                  if (TREE_CODE (field) != FIELD_DECL
                      || (DECL_ARTIFICIAL (field)
                          && !(cxx_dialect >= cxx17
                               && DECL_FIELD_IS_BASE (field))))
                    continue;
 
+                 if (DECL_UNNAMED_BIT_FIELD (field))
+                   continue;
+
                  if (ce->index == field || ce->index == DECL_NAME (field))
                    break;
                  if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))