https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62125
--- Comment #5 from mrestelli <mrestelli at gmail dot com> --- I think the following patch could solve the problem: Index: gcc/fortran/symbol.c =================================================================== --- gcc/fortran/symbol.c (revision 238083) +++ gcc/fortran/symbol.c (working copy) @@ -2930,7 +2930,11 @@ gfc_select_type_stack *stack = select_type_stack; for (; stack; stack = stack->prev) if ((*st)->n.sym == stack->selector && stack->tmp) - *st = stack->tmp; + { + *st = stack->tmp; + select_type_insert_tmp (st); + return; + } } The idea is that now a variable acting as selector in a SELECT TYPE is "promoted" to a tmp variable only once; this change does it recursively. (I don't know whether this breaks anything, I don't know how to run the regression tests myself)