[flang] Fix locations of wrapped unstructured constructs and DO loop ends (#228577)
Construct evaluations have no source position, so the scf.execute_region
wrapping an unstructured construct was given the location of the
previously lowered statement. Use the construct's first statement for
the region and its END statement for the scf.yield. Also attribute the
DO loop end code to the END DO statement rather than to the last
statement of the loop body.
This avoids going back to previous lines when stepping in a debugger.
Assisted-by: AI