fparser icon indicating copy to clipboard operation
fparser copied to clipboard

Pre-processor directives created by fparser do not compile

Open hiker opened this issue 1 year ago • 0 comments

fparser has limited support for preprocessor directives. Example:

MODULE lfric_abort_mod
  IMPLICIT NONE
  CONTAINS
  SUBROUTINE parallel_abort(ierr)
    #ifdef NO_MPI
    #else
    USE mpi, ONLY: mpi_abort, MPI_COMM_WORLD
    #endif

But the indentation causes gfortran to abort:

gfortran -C -g -O0 -c lfric_abort_mod.F90
lfric_abort_mod.F90:5:6:

    5 |     #ifdef NO_MPI
      |      1
Error: Invalid character in name at (1)

And intel issues a warning:

 ifort -C -g -O0 -c lfric_abort_mod.F90
lfric_abort_mod.F90(5): warning #5117: Bad # preprocessor line
    #ifdef NO_MPI
-----^

Using the pre-processor explicitly (cpp -P) works.

As a discussion: It might be useful to avoid indentation for preprocessor directives. I don't strongly needed it, I can add a pre-processing step instead, but I think it could be useful for some applications? But I am equally happy to close this ticket since our preprocessor support is documented to be very limited.

hiker avatar Jan 23 '24 11:01 hiker