<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi David,</p>
There was a different Flang project before Nvidia's involvement,
which successfully used and extended Clang ASTs. The code is still <a
moz-do-not-send="true" href="https://github.com/llvm-flang/flang">on
Github</a>, along with updated <a moz-do-not-send="true"
href="https://github.com/llvm-fortran/fort/">fork</a> (which
builds with trunk). It implements a fair share of the Fortran
features that you have mentioned using (what is essentially) Clang's
infrastructure.<br>
<br>
IMO, it is possible to use Clang ASTs, but also there is a lot of
other code and patterns in Clang that would be useful for a Fortran
frontend - error handling, driver, testing, etc. It would make
sense to take those things from Clang rather than reinvent them in
F18.<br>
<br>
Best,<br>
Petr<br>
<div class="moz-cite-prefix"><br>
On 10/14/2018 09:21, David Greene via cfe-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:BN6PR11MB18283F4D09B627AEB256C14ADEFC0@BN6PR11MB1828.namprd11.prod.outlook.com">
<pre wrap="">F18 currently lowers to LLVM IR, but that is too low-level for the kind of tooling we
want to have. Clang's tooling works on the AST because it is high-level enough to
express source language concepts and reason about them.
For example, one can't easily write a source-level documentation tool that works
with LLVM IR. The same goes for tools like code formatters, syntax highlighters
and anything else that wants to analyze and/or modify source.
-David
________________________________________
From: Marcus Johnson <a class="moz-txt-link-rfc2396E" href="mailto:bumblebritches57@gmail.com"><bumblebritches57@gmail.com></a>
Sent: Friday, October 12, 2018 7:20:51 PM
To: David Greene
Cc: Flang development; Clang development
Subject: Re: [cfe-dev] [F18/AST] Using clang tooling with f18
I know absolutely nothing about the AST, but why not just use LLVM's IR?
</pre>
<blockquote type="cite">
<pre wrap="">On Oct 12, 2018, at 1:58 PM, David Greene via cfe-dev <a class="moz-txt-link-rfc2396E" href="mailto:cfe-dev@lists.llvm.org"><cfe-dev@lists.llvm.org></a> wrote:
[Reposted with the correct clang mailing list -- sorry about the
duplicate...]
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
interface.
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. :)
-David
_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<pre wrap="">_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>