https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57955
--- Comment #24 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Just to summarize this bug as far as I read it, please correct me if I am wrong; note I am not proposing a change, just trying to summarize the back and forth since it is not obvious right away of what the problem was. This was the testcase: void foo(void) { int x[8] __attribute__((aligned(128))) = { 1, 1, 1, 1, 1, 1, 1, 1 }; bar (x); } Before the gimplification change the initializer {1,....} was promoted to a static const and given an alignment of 128; due to this part of the code: if (align > DECL_ALIGN (new_tree)) { DECL_ALIGN (new_tree) = align; DECL_USER_ALIGN (new_tree) = 1; } But now it just uses DATA_ALIGNMENT (the code should be using TARGET_CONSTANT_ALIGNMENT but does not right now, that was a proposal). rs6000_constant_alignment (TARGET_CONSTANT_ALIGNMENT) only aligns strings csts to word (32 or 64) aligned. rs6000_data_alignment (DATA_ALIGNMENT) only aligns vectors to 128 and char arrays to word (32 or 64) align.