y(ptr:y) does not allocate anything new. It's the same as yy51, for instance.
Here we use y51 as storage variable and y2 as reusable pointer.
There is possibility to introduce bugs when dealing with y(ptr:y) syntax, because no checks are performed when you increase/decrease/assign pointer value.