Issue 050718.1: FORTRAN extensions
Problem
-------
DWARF has no way to express the "elemental", "pure" and "recursive" properties
of Fortran 95 subroutines or functions.
To allow debuggers correctly to call such subroutines/functions at least
the "elemental" property must be known to the debugger. If we're adding
one property we may as well fix all of them at one go.
Proposed Text
-------------
In section 3.3.1 ("General Subroutine and Entrypoint Information") add
(on page 44, at the end of the section)
A subprogram entry may have the DW_AT_elemental attribute, whose value
is a flag. If the flag is true, then the subprogram should have scalar
formal arguments, but apply Fortran elemental conversions to allow
it to be called with array actuals.
A subprogram entry may have the DW_AT_pure attribute, whose value
is a flag. If the flag is true, then the subprogram should obey the
rules for a Fortran "pure" subprogram.
A subprogram entry may have the DW_AT_recursive attribute, whose value
is a flag. If the flag is true, then the subprogram is recursive, if
the flag is false the subprogram is not recursive. If the attribute is
not present then the recursiveness of the subprogram is determined by
the default for the language of the compilation unit.
*So, in C, C++ or Java the recursive attribute would never need
to be specified since all subprograms are recursive by default in these
languages, whereas in Fortran the recursive attribute with flag value
"true" should be specified for subprograms which were declared
with the recursive keyword, since the default in Fortran is for
subprograms not to be recursive.*
In section 2.2 (the table of attributes), the new attributes need to be
added in the appropriate places.
In the appendix "Attribute values by tag", the new attributes need to be
added to the table for DW_TAG_subprogram.
The new attributes need index entries.
The new attributes need to be added to the table on p135, and assigned
appropriate values.
==============================
Accepted with the following change:
Replace "is recursive" with "is declared recursive" in the description of
DW_AT_recursive.