[current tinderbox] failure on ...all...

Poul-Henning Kamp phk at phk.freebsd.dk
Fri Jun 10 09:49:55 GMT 2005


In message <20050610094615.GC79474 at ip.net.ua>, Ruslan Ermilov writes:


>> struct t1 { int a; } x;
>> struct t2 { int a; } y = { 42 };
>> x = y;
>> 
>> The types `struct t1' and `struct t2' are not compatible and thus not
>> assignable.  See 6.2.7 and 6.5.16.1.
>> 
>If you're to byte-copy say t1 to t2, is it guaranteed to work?  That is,
>do both types are guaranteed to have the same size and alignment of their
>structure members?  I'm pretty sure this is guaranteed, as lot of code
>assumes this, for example, the sockaddr* structures.

I do not belive that is guaranteed.  (If it were the structs might as
well have been made assignable).  You need to make sure that the two
definitions are covered by the exact same compilation conditions,
and you can't tell if a compiler has an option along the lines of

	-fstruct_is_magic=t2

Which does weird things you don't know about.

The fact that it mostly works (and that we rely on this) is a
testament to the fact that compiler writers emply their destructive
creativity elsewhere.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the freebsd-current mailing list