What happens if storage __gap is placed in at the beginning and not the end of a contract?

It’s openzeppelin’s convention to include “uint256[50] private __gap” at the end of a contract.

However, what’s the implication if upgradeable storage gap is placed in slot 0 then followed by a declared variable. For instance:

contract XYZ {uint256[9] private __gap;bool public pause;}

What exactly is the implication of this in simplest terms? What happens when such a contract is upgraded?

And is the above safe?

Thanks.