[cfe-dev] [F18/AST] Using clang tooling with f18

David Greene via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 12 10:58:15 PDT 2018

[Reposted with the correct clang mailing list -- sorry about the

Hi all,

We've been having a bit of discussion over on flang-dev and wanted to
bring in clang people to comment/brainstorm.  Here is the original post
that kicked this off on flang-dev:

  I was hoping f18 would lower to something akin to clang's AST.
  Obviously clang's AST doesn't directly apply to Fortran but perhaps
  some kind of common interface could exist so that clang tools could
  work with Fortran codes. It would be great to have things like the
  clang static analyzer and clang-doc for Fortran.
  Some tools will be language-specific of course but it seems like
  Fortran and C-family languages share enough common concepts that some
  tooling could work with both, given a common interface.
  Language-specific tools would work with a more language-specific
  My impression from the presentation is that there's a lot more that
  could be shared with clang. The messaging system and command-line
  options infrastructure should be shareable, for example.  Maybe
  there's already work being done in these areas to make f18 a
  first-class LLVM project.

Folks raised some concerns/areas to explore:

- Can we represent various Fortran constructs with additions to the
  clang AST?  For example:

  * Implied DO loops
  * Array syntax
  * I/O statements (FORMAT, READ, NAMELIST, etc.)
  * Array declarations (DIMENSION, etc.)
  * Array syntax
  * ...

- Can clang's infrastructure handle various Fortran oddities like
  non-reserved keyworks and the ability to redefine constants?

  These may primarily be "dusty deck" issues and perhaps for tooling
  purposes a 98% solution is ok.  F18 still needs to fully handle them,
  of course.

- Can we modify clang's AST and surrounding infrastructure to re-use
  bits of clang tooling for f18 or should we create some kind of common
  tooling interface for clang/f18 tooling that can also support
  language-specific bits?

- Can this be forward-looking for tooling for other languages (Rust,
  Chapel, Go, etc.)?

We pretty quickly came to a point where we needed input from clang
folks, so here we are.  :)


More information about the cfe-dev mailing list