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.