> HMm, i'd just record it for all of them, since the [fields] are accessible > through a pointer to the structure.
They are indeed accessible this way... > Just because you can't directly take the address of a bitfield doesn't > mean you can't access one through a pointer, which is the entire > purpose of knowing alias sets (knowing what a pointer dereference > could affect). ...but DECL_NONADDRESSABLE_P precisely means that the alias set used for accessing these fields at the RTL level is that of the containing structure: /* Return true if all nested component references handled by get_inner_reference in T are such that we should use the alias set provided by the object at the heart of T. This is true for non-addressable components (which don't have their own alias set), as well as components of objects in alias set zero. This later point is a special case wherein we wish to override the alias set used by the component, but we don't have per-FIELD_DECL assignable alias sets. */ bool component_uses_parent_alias_set (tree t) { while (1) { /* If we're at the end, it vacuously uses its own alias set. */ if (!handled_component_p (t)) return false; switch (TREE_CODE (t)) { case COMPONENT_REF: if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))) return true; break; so the code in record_component_aliases is consistent with that. Adam has simply run with C into another form of the same discrepancy we have run into when we tried to enable struct aliasing with Ada, see PR 25737. -- Eric Botcazou