On Sun, 27 Oct 2024, Thorsten Glaser wrote:

> >https://gcc.gnu.org/wiki/RustFrontEnd
> 
> That’s assuming it can build the same stuff the same way so it can be 
> used in packaging.
> 

Not an assumption. I simply pointed out an opportunity for collaboration, 
because I see the primary problem facing the m68k port is a lack of 
resources.

> >I expect alignment assumptions like that will end up putting more 
> >platforms in the same predicament in future.
> 
> No, all the other platforms use natural alignment.
> 
> >"Natural" alignment is meaningless in the context of portable data
> >structures, as they exist without reference to any particular integer
> 
> Yeah, but in practice, all we have is ILP32 and LP64; 

... for now.

> the Windows® world has LLP64 in addition. And natural alignment just 
> means that all the data types’ alignment is their size. (Which kind of 
> makes sense, so you can read them without getting an unalignment trap on 
> SPARC or so.)
> 

That would mean __alignof__(foo.b) == sizeof(foo.b) but that's not the 
case on my Linux/i686 system. 4 != 8:

struct baa {
        int a;
        long long b;
} foo;

> >Q. What is the size of this struct, assuming baa.b is naturally aligned?
> >
> >struct baa {
> >        int a;
> >        long long b;
> >};
> 
> For ILP32, LP64 and LLP64, it’s 4 (a) + 4 (padding) + 8 (b) = 16 chars.

So natural alignment is portable if you first assume a data model. But the 
struct definition itself is not portable, since it doesn't specify a data 
model.

> More importantly, and relevant for Qt, struct baa is also 8-byte
> aligned...
> 

If the struct itself is not naturally aligned, it too will eventually 
break someone's assumption of natural alignment.

Reply via email to