I tried to ask in gcc and was redirected here. So, I've read the spec about extension The `[index]' or `.fieldname' is known as a designator. You can also use a designator (or the obsolete colon syntax) when initializing a union, to specify which element of the union should be used. For example, union foo { int i; double d; }; union foo f = { .d = 4 }; will convert 4 to a double to store it in the union using the second element. By contrast, casting 4 to type union foo would store it into the union as the integer i, since it is an integer. (See Cast to Union.) and wrote the following test: union foo { int i; double d; }; int main(int argc, char **argv) { union foo f = { .d = 4 }; ASSERT_EQ(0, f.i); ASSERT_FEQ(4.0, f.d); return 0; } ASSERT_EQ and ASSERT_FEQ are some macros which checks the value and gives some error messages. But it fails on sparc. I guess int should be equal 0x40100000 since bytes are in reverse order. As I know now, this extension is not bi-endian. So the question is: what shall I do? Does it mean that I just shall forget about that extension usage on sparc? Sergey