First of all, I think you should handle ARRAY_RANGE_REF and ARRAY_REF the same.
I don't think so. The latter is a memory reference while the former is more like a NOP_EXPR: it's basically just creating a new array, which can then either be indexed or pointed to.