fortran-lang / fpm

Fortran Package Manager (fpm)
https://fpm.fortran-lang.org
MIT License
872 stars 98 forks source link

Program without program-statement misclassification during parsing #1075

Open ivan-pi opened 2 hours ago

ivan-pi commented 2 hours ago

Description

fpm doesn't classify correctly the source type of program units without a program-statement, such as:

print *, "Hello World"
end

or

print *, "Hello World"
end program

which are allowed according to the standard.

Currently, parse_f_source will return FPM_UNIT_SUBPROGRAM (=4)` for these two cases.

Expected Behaviour

The expected source unit type should be FPM_UNIT_PROGRAM (=1).

Version of fpm

0.8.1, alpha

Platform and Architecture

MacOS (Intel)

Additional Information

The culprit is the parsing logic, which relies on detecting the program statement at front:

https://github.com/fortran-lang/fpm/blob/da6d1bf89a241cd87d640b889ab1e570e8be5f35/src/fpm_source_parsing.f90#L335-L355

Instead it should probably rely on the end program statement which is mandatory per the standard. (J3/24-007, 14.1)

ivan-pi commented 2 hours ago

I suppose that from the build perspective, a program unit is not very different to an external procedure.