if (tree_int_cst_sgn (args[m_bit_width]) < 0)
return throw_exception (loc, ctx, "bit_width is negative",
fun, non_constant_p, jump_target);
+ if (args[m_name] == NULL_TREE)
+ {
+ if (eval_is_const (type, REFLECT_UNDEF) == boolean_true_node)
+ return throw_exception (loc, ctx,
+ "name unspecified and type is const",
+ fun, non_constant_p, jump_target);
+ if (eval_is_volatile (type, REFLECT_UNDEF) == boolean_true_node)
+ return throw_exception (loc, ctx,
+ "name unspecified and type is volatile",
+ fun, non_constant_p, jump_target);
+ }
}
if (args[m_alignment])
{
static_assert (!valid_data_member_spec (^^decomp, { .name = "dms" }));
static_assert (!valid_data_member_spec (^^decomp_ref, { .name = "dms" }));
static_assert (!valid_data_member_spec (^^arr, { .name = "dms" }));
+// LWG4517 - data_member_spec should throw for cv-qualified unnamed bit-fields
+static_assert (!valid_data_member_spec (^^const int, { .bit_width = 3 }));
+static_assert (!valid_data_member_spec (^^volatile short, { .bit_width = 7 }));
+static_assert (!valid_data_member_spec (^^const int, { .bit_width = 0 }));
+static_assert (!valid_data_member_spec (^^volatile short, { .bit_width = 0 }));
+static_assert (!valid_data_member_spec (^^const volatile char, { .bit_width = 2 }));
constexpr auto dms = data_member_spec (^^int, { .name = "dms" });
static_assert (!valid_data_member_spec (dms, { .name = "dms" }));