[flang][lowering] fix vector subscripts in character elemental procedures (#156661)
Fixes https://github.com/llvm/llvm-project/issues/145151
Character elemental procedures require evaluating the result
specification expression outside of the elemental loops when the
function result length is not a constant. This is needed so that the
array result storage can be allocated before the evaluation if a storage
is needed.
Because the result specification expression may depend on inquires about
the dummy argument (but not usages of values thanks to F2023 C15121),
some representation of the dummy must be created. Since this is an
elemental call, this requires providing an element, and not the whole
array actual argument (we only care about the properties of such element
it does not matter which element is being used).
The previous code was creating the element with a type cast from the
base array, but this did not work with vector subscripted arrays where
the lowering representation is more complex. This caused a compiler
assert to fire.
Switch the code to only copy the properties that can be inquired from
the actual argument to the mock dummy (length parameters, dynamic type
and presence). A mock one address is used instead of addressing the
actual argument before the loop (one is used instead of NULL so that
presence inquiry will work as expected for OPTIONAL arguments).