view gcc/testsuite/g++.dg/torture/pr88149.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// { dg-do compile }
// { dg-additional-options "-ftree-vectorize" }

template <typename> struct a;
template <typename b> struct a<b *> {
  typedef long c;
  typedef b &d;
};
template <typename e> class f {
  e ab;
  typedef a<e> ac;

public:
  typename ac::d operator[](typename ac::c o) { return ab[o]; }
};
template <typename> struct au;
template <typename b> au<b> operator+(au<b> o, au<b> p2) {
  au<b> ax = o;
  ax += p2;
  return ax;
}
template <typename b> au<b> operator-(au<b> o, au<b> p2) {
  au<b> ax = o;
  ax -= p2;
  return ax;
}
template <typename b> au<b> operator*(au<b>, au<b> &p2) {
  au<b> ax;
  ax *= p2;
  return ax;
}
template <> struct au<double> {
  double p() { return __real__ az; }
  double q() { return __imag__ az; }
  void operator+=(au o) {
    az += o.p();
    __imag__ az += o.q();
  }
  void operator-=(au o) {
    az -= o.p();
    __imag__ az -= o.q();
  }
  void operator*=(au &o) {
    _Complex bd = o.p();
    __imag__ bd = o.q();
    az *= bd;
  }
  _Complex az;
};
long bm, m;
f<au<double> *> g;
au<double> h, i, l;
void bn() {
  au<double> bq;
  for (long k; m;) {
    au<double> br;
    for (long j = 0; j < bm; ++j) {
      au<double> n = br * h;
      i = l + n;
      g[k] = l - bq;
    }
  }
}