{
                      cnt--;
                      field = fld;
+                     pos = int_byte_position (field);
                      val = build_zero_cst (TREE_TYPE (fld));
                      if (TREE_CODE (val) == CONSTRUCTOR)
                        to_free = val;
 
--- /dev/null
+// PR c++/98193
+// { dg-do compile { target c++20 } }
+
+template <typename To, typename From>
+constexpr To
+bit_cast (const From &from)
+{
+  return __builtin_bit_cast (To, from);
+}
+
+struct J
+{
+  long int a, b : 11, h;
+};
+
+struct K
+{
+  long int a, b : 11, c;
+  constexpr bool operator == (const K &x)
+  {
+    return a == x.a && b == x.b && c == x.c;
+  }
+};
+
+struct L
+{
+  long long int a, b : 11, h;
+};
+struct M
+{
+  long long int a, b : 11, c;
+  constexpr bool operator == (const M &x)
+  {
+    return a == x.a && b == x.b && c == x.c;
+  }
+};
+
+static_assert (bit_cast <K> (J{}) == K{}, "");
+static_assert (bit_cast <M> (L{0x0feedbacdeadbeefLL}) == M{0x0feedbacdeadbeefLL}, "");