If the actual mathematical object being worked on is a triangular matrix (or other special matrix form) the actual sorage size of the object would be different from the number of rows/columns, and require an additional argument to the subroutine. The numeric value in the declarator subscript statement could be a literal integer:
dimension x(10,10)
or a variable:
dimension x(N,N),
but not an expression.
dimension x(N*N/2+1)
This practice avoids that and was (still is) 100% portable.