------- Comment #3 from pinskia at gcc dot gnu dot org 2008-08-05 00:22 ------- Note the reason why this "works" on x86 and not rs6000 or really any other backend is that the x86 back-end assumes that the middle-end asks about some calls that could return in different locations: /* Check that the return value locations are the same. Like ... This is also the place we notice differences in the return value ABI. Note that it is ok for one of the functions to have void return type as long as the return value of the other is passed in a register. */ .... if (STACK_REG_P (a) || STACK_REG_P (b)) { if (!rtx_equal_p (a, b)) return false; } else if (VOID_TYPE_P (TREE_TYPE (DECL_RESULT (cfun->decl)))) ; else if (!rtx_equal_p (a, b)) return false;
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37024