Fortran/Makefiles: Some preprocessor patterns break dependency scanning
I wrote a simple reproducer program; it can be acquired here: https://github.com/jgfouca/f90_dep_bug
The broken file contains:
module ice_flux implicit none save real, dimension (1,2,3) :: & daidtd , & dvidtd ! The presence of this segment breaks the detection of the ice_state dependency real, dimension(1,2,3) :: & #ifdef FOO baz, & #endif #ifdef BAR bla, & #endif goo ! end broken segment contains subroutine init_history_dyn use ice_state, only: aice, vice daidtd (:,:,:) = aice(:,:,:) dvidtd (:,:,:) = vice(:,:,:) end subroutine init_history_dyn end module ice_flux
With this code, the dependency on ice_state is missed. If either (or both) of the FOO or BAR ifdefs are removed, the dependency is found. If the 'use ice_state' statement is moved to before the ifdefs, the dependency is found.
This issue looks somewhat similar to #18188 but is a bit different since the ifdefs are removed from the use statement.