Use a named rather than anon struct in instance

The anonymous struct nested in a union triggers a -Wnested-anon-type
warning ("anonymous types declared in an anonymous union are an
extension") under clang (#1204).  This names the struct and defines it
out of the definition of `instance` to get around to warning (and makes
the code slightly simpler).
This commit is contained in:
Jason Rhinelander 2018-01-11 11:42:22 -04:00 committed by Wenzel Jakob
parent 7f170fe4e1
commit c8f07b5d01

View File

@ -377,16 +377,18 @@ constexpr size_t instance_simple_holder_in_ptrs() {
struct type_info; struct type_info;
struct value_and_holder; struct value_and_holder;
struct nonsimple_values_and_holders {
void **values_and_holders;
uint8_t *status;
};
/// The 'instance' type which needs to be standard layout (need to be able to use 'offsetof') /// The 'instance' type which needs to be standard layout (need to be able to use 'offsetof')
struct instance { struct instance {
PyObject_HEAD PyObject_HEAD
/// Storage for pointers and holder; see simple_layout, below, for a description /// Storage for pointers and holder; see simple_layout, below, for a description
union { union {
void *simple_value_holder[1 + instance_simple_holder_in_ptrs()]; void *simple_value_holder[1 + instance_simple_holder_in_ptrs()];
struct { nonsimple_values_and_holders nonsimple;
void **values_and_holders;
uint8_t *status;
} nonsimple;
}; };
/// Weak references (needed for keep alive): /// Weak references (needed for keep alive):
PyObject *weakrefs; PyObject *weakrefs;