On Fri, May 04, 2018 at 02:05:11PM -0600, Jeff Law wrote:
> On 05/04/2018 01:55 PM, Steve Kargl wrote:
> > On Fri, May 04, 2018 at 01:32:00PM -0600, Jeff Law wrote:
> >>
> >> The Fortran front end has its own code to parse # <line> <file>
> >> directives.  We've run into a case where it does not function correctly.
> >>  In particular when the directive changes the current file, subsequent
> >> diagnostics still refer to the original filename.
> >>
> >> Concretely take this code and compile it with -Wall:
> >>
> >> # 12345 "foo-f"
> >> SUBROUTINE s(dummy)
> >>   INTEGER, INTENT(in) :: dummy
> >> END SUBROUTINE
> > 
> > Can you tell us where the above comes from?
> Use of # <line> <file> is a standard CPP directive one can use to change
> the compiler's notion of file/line.   It's defined by ISO for C/C++ and
> appears to be relatively common in other Fortran compilers.  GNU Fortran
> tries to handle it and just gets it slightly wrong.
> 
> It's most typically used when source code is generated by another program.
> 
> > If I have the three lines of code in a file 
> > name 'a.inc', and use either the Fortran
> > INCLUDE statement or a cpp #include statement
> > I get what I expect.
> Right.  That uses a slightly different form internally.  It'll get
> turned into
> 
> # <line> <file> <flags>
> 
> Where the flags will indicate entry/exit from included files.  That form
> is handled correctly by the GNU Fortran front end.  But this form is not
> for external use.

Thanks for the explanation.  The patch looks good to me.

-- 
Steve

Reply via email to