https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114068

--- Comment #9 from Sam James <sjames at gcc dot gnu.org> ---
```
template <class T> struct Array1DRef {
  T data;
  T *addressOf(int eltIdx) { return &data + eltIdx; }
};
template <class T> struct CroppedArray1DRef {
  Array1DRef<T> base;
  int numElts;
  void getAsArray1DRef() {
    if (numElts)
      __builtin_unreachable();
  }
  T &operator()(int eltIdx) {
    if (eltIdx > numElts)
      __builtin_unreachable();
    return *base.addressOf(eltIdx);
  }
};
struct Array2DRef {
  CroppedArray1DRef<int> __trans_tmp_2;
  void operator[](int) { __trans_tmp_2.getAsArray1DRef(); }
} clearArea_base0;
CroppedArray1DRef<short> __trans_tmp_1;
int clearArea_y, clearArea_posx;
void clearArea() {
  Array2DRef base = clearArea_base0;
  for (int x = clearArea_posx; x; ++x) {
    base.operator[](clearArea_y);
    __trans_tmp_1(x) = 0;
  }
}
```

Reply via email to