/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-optimized" } */

void link_error();

struct OOf {
        int value;
        OOf() {value = 0;}
};
inline OOf operator+(OOf op1, OOf op2)
{
        OOf f;
        f.value = op1.value + op2.value;
        return f;
}
inline OOf operator*(OOf op1, OOf op2)
{
        OOf f;
        f.value = op1.value * op2.value;
        return f;
}
inline OOf operator-(OOf op1, OOf op2)
{
        OOf f;
        f.value = op1.value - op2.value;
        return f;
}
inline OOf test_func(
        OOf a,
        OOf b,
        OOf c
)
{
        OOf d, e;
        OOf result;
        d = a * b + b * c;
        e = a * c - b * d;
        result = d * e;
        return result;
}

void test()
{
  OOf a, b, c;
  OOf d = test_func (a,b,c);
  if (d.value)
    link_error();
}

/* We should have removed the casts from pointers to references and caused SRA to happen.  */
/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized"} } */
