https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102148
Bug ID: 102148 Summary: ppc64le: homogeneous float arguments are not passed correctly Product: gcc Version: 8.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: zlwang at ca dot ibm.com Target Milestone: --- example program: typedef struct { float a[2]; } sub; typedef struct {float b; sub c; float d;} R; extern R func(long,R,float,int); R v = {0, {1,2}, 3}; double ma() { R rv = func(77,v,88,99); return rv.d; } Since R is a homogeneous float aggregate with less than 8 elements, func argument passing should look like the following function: func(long, float, float, float, float, float, int) But they are not. At least for gcc8.4.1, the latter's long/int are passed in r3 and r9 respectively; while the former's long/int are passed in r3 and r7 respectively.