https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111521
--- Comment #1 from Davide Cesari <dcesari69 at gmail dot com> --- An update: By replacing the line list_getcurr => this%curr%getval() with CLASS(*),POINTER :: l_p l_p => this%curr%getval() list_getcurr => l_p i.e. assigning the upper function result to a temporary local pointer and setting the current function result to that pointer gives the correct result.