------- Comment #5 from shcherbakov at daad-alumni dot de 2010-01-30 20:08 ------- Oops, missed a semicolon in the first line of "test case" (compile it with g++). ARM uses ACCUMULATE_OUTGOING_ARGS instead of PUSH_ARGS. To reproduce the problem on ARM, you need to comment out "#define ACCUMULATE_OUTGOING_ARGS 1" and add "#define PUSH_ARGS 1" in "gcc/config/arm/arm.h", so that func1() will contain several "push" instructions rather than "mov xxx, [sp + yyy]". To see that the code has been compiled incorrectly, simply examine the assembly output of "func1()", that will push the "copy" to stack starting with first word and ending with the last one (causing the layout in stack to be inverted).
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42722