Skip to content

Pre-processor directives created by fparser do not compile #441

Open
@hiker

Description

@hiker

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions