BTW, I had a thought about this patch, which I wanted to write down before it disappears again (I'm not offering to code it right now).
I think we should split array_subscript_handler into two functions, one for "regular" varlena arrays and one for the fixed-length pseudo-array types like "name" and "point". This needn't have a lot of impact on the execution code. In fact, for the first version both handlers could just return the same set of method pointers, and then if we feel like it we could tease apart the code paths later. The value of doing this is that then typsubshandler could be used as a bulletproof designator of the type's semantics. Instead of weird implementation-dependent tests on typlen and so on, the rule could be "it's a regular array if typsubshandler == F_ARRAY_SUBSCRIPT_HANDLER". Later on, we could even allow the "fixed length" array semantics to be applied to varlena types perhaps, so long as their contents are just N copies of some fixed-size type. The point here is that we now have a tool for recognizing the subscripting semantics reliably, instead of having to back into an understanding of what they are. But for the tool to be useful, we don't want the same handler implementing significantly different behaviors. regards, tom lane