test_obj% add_integers_up is not a procedure - it is a binding that happens with a procedure called add_integers_up. You cannot pass a binding as an actual argument.
If you want to pass the specific procedure that the binding is associated with, follow the procedure! Hypothetically:
call print_result_of_subroutine(i4, add_integers_up)
But, as other posters noted, in your sample code, the interface of this procedure does not match the interface of the corresponding dummy argument in print_result_of_subroutine.
If test_obj% add_integers_up refers to the associated component of the procedure pointer (and the interface for this component matches the expected print_result_of_subroutine), then everything will work as you expect.
Please note that Fortran 90 does not support type binding procedures (or components of a procedure pointer) - Fortran 2003 is very necessary for your code.
source share