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

From: Poul-Henning Kamp <phk_at_phk.freebsd.dk>
Date: Fri, 10 Jun 2005 11:49:45 +0200
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.
Received on Fri Jun 10 2005 - 07:49:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:36 UTC