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;
}
}
```