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