FORTRAN 2003 abstract=>concrete class issue

Hi there. I think I found a compiler bug, perhaps you can confirm. I am using PGI Workstation 13.4, and I’m compiling with the pgfortran program.

I made a simple testing class diagram which exercised most of the functionality I would expect to use, just to learn. (Class diagram here:

The complete implementation is on github, here:

The part that concerns me is when I try to extend an abstract class to make a concrete class:

type, extends(AbstractCellIterator) :: RowFirstCellIterator
        procedure :: hasNext => hasnext_rowfirst
        procedure :: next => next_rowfirst
end type

When I run the code, and step into my iter%next() call, I end up in the function “hasnext_rowfirst” instead of “next_rowfirst”.

 Row First Navigation!
Breakpoint at 0x402AC9, function walk_path, file test_cell_iterator.f03, line 36
 #36:         if (.not. associated(iter)) then

pgdbg> n
Stopped at 0x402B44, function walk_path, file test_cell_iterator.f03, line 39
 #39:             do while (iter%hasNext())

pgdbg> n
 In hasnext_rowfirst()
Stopped at 0x402B6D, function walk_path, file test_cell_iterator.f03, line 40
 #40:                 print *, "top of loop"

pgdbg> n
 top of loop
Stopped at 0x402BD6, function walk_path, file test_cell_iterator.f03, line 41
 #41:                 cur_coord => (iter%next())

pgdbg> step
Stopped at 0x403A60, function hasnext_rowfirst, file cell_iterator.f03, line 147
 #147:         hasnext_rowfirst = .false.

It’s the last line of that debugger that bugs me. Is this a known bug? Did I do something wrong? Is there a workaround? (BTW-gfortran 4.7 seems to work as expected.)

Also, pgfortran reported a syntax error (and terminated with signal 11) until I made this change in grid_coordinates.f03 (

Hi Bryce,

Apologies for the late reply. I passed this on to engineering who agree it’s PGI compiler error. We have added a problem report (TPR#19398) and hope to have this fixed in the near future.

Best Regards,


TPR 19398 has been fixed in the current 13.7 release.

Thanks for the report.