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.

Reply via email to