structure members of packed structures

Nathan Sidwell nathan@codesourcery.com
Tue Jul 15 10:30:00 GMT 2003


Hans-Peter Nilsson wrote:
> On Mon, 14 Jul 2003, Nathan Sidwell wrote:

> Only for members whose type does not include a "packed"
> qualifier, and only when used in an expression whose type also
> doesn't include a packed qualifier.  For example, this should
> remain valid and supported:
> 
> struct Packed s1;
> struct __attribute__ ((packed)) Unpacked *p1;
> p1 = &s1.u;
Lik Mark has said, it is hard to do this *and* prevent
  struct Unpacked *p2 = &s1.u;
because building the ADDR_EXPR loses the unalignedness information.
The 'proper' fix is to propagate an unaligned attribute, but I understand
there have been objections in the past to doing that kind of thing.

The original problem manifested in C++ with reference binding to
such a packed field. In C++ reference binding happens much more quietly
(there is no '&' screaming at you in the source.)
I could restrict to reference binding.

Dale Johannesen wrote:
 > Contingent on STRICT_ALIGNMENT, please.  Unaligned accesses are not
 > a problem on all architectures.
good point.

Another question. What about
struct __attribute__((packed)) Foo
{
   T m;
};

here m happens to fall at an aligned address, and the size of Foo happens
to be a multiple of that alignment. Should m be DECL_PACKED or not?

nathan

-- 
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
          The voices in my head said this was stupid too
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk




More information about the Gcc mailing list