Hi! There are several g*dg/compat/ tests failing that show ABI incompatibilities:
FAIL: tmpdir-g++.dg-struct-layout-1/t024 cp_compat_x_tst.o-cp_compat_y_alt.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t024 cp_compat_x_alt.o-cp_compat_y_tst.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t026 cp_compat_x_tst.o-cp_compat_y_alt.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t026 cp_compat_x_alt.o-cp_compat_y_tst.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t027 cp_compat_x_tst.o-cp_compat_y_alt.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t027 cp_compat_x_alt.o-cp_compat_y_tst.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t028 cp_compat_x_tst.o-cp_compat_y_alt.o execute FAIL: tmpdir-g++.dg-struct-layout-1/t028 cp_compat_x_alt.o-cp_compat_y_tst.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t025 c_compat_x_tst.o-c_compat_y_alt.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t025 c_compat_x_alt.o-c_compat_y_tst.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t027 c_compat_x_tst.o-c_compat_y_alt.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t027 c_compat_x_alt.o-c_compat_y_tst.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t028 c_compat_x_tst.o-c_compat_y_alt.o execute FAIL: tmpdir-gcc.dg-struct-layout-1/t028 c_compat_x_alt.o-c_compat_y_tst.o execute I have looked just at one failure, but maybe all of them are the same thing. typedef char __attribute__((vector_size (16))) v16qi; int i = __alignof__ (v16qi); with GCC 4.0 sets i to 8 (s390{,x} have BIGGEST_ALIGNMENT 64), but GCC 4.1 sets i to 16. The changes that created this binary incompatibility are http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23467 I think. layout_type sets TYPE_ALIGN to 128 bits (size of v16qi) and in 4.0 and earlier finalize_type_size used to decrease the size to GET_MODE_ALIGNMENT (TImode), which is 64 on s390{,x}. Was this change intentional? If yes, I think it should be documented in 4.1 release notes, but I still hope it wasn't intentional. Jakub