&\livelink{chap:DWATvisibility}{DW\_AT\_visibility} \\
\hline
-\DWTAGcoarraytypeLL
+\DWTAGcoarraytype
&\livelink{chap:DECL}{DECL} \\
&\livelink{chap:DWATname}{DW\_AT\_name} \\
&\livelink{chap:DWATsibling}{DW\_AT\_sibling} \\
\hline
% Please keep in synch with DW_TAG_subrange_type.
-\DWTAGgenericsubrangeLL
+\DWTAGgenericsubrange
&\livelink{chap:DECL}{DECL} \\
&\livelink{chap:DWATabstractorigin}{DW\_AT\_abstract\_origin} \\
&\livelink{chap:DWATaccessibility}{DW\_AT\_accessibility} \\
\vspace{1cm}
\begin{tabular}{ll}
-\textbf{Date} & \textbf{Issue Incorported or Other Change} \\ \hline \\
+\textbf{Date} & \textbf{Issue Incorported or Other Change} \\ \hline \\
+9/28/2013 & Introduce \newdwfnamecommands and related conventions \\
9/27/2013 & Editorial work re assumed-rank arrays, other minor cleanups \\
9/23/2013 & 130313.5 (Fortran assumed-rank arrays)\\
6/22/2013 & 100805.1 (value of reference), 100816.1 (remove .debug\_types), \\
\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} &0x41 \\
\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type} &0x42 \\
\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias} &0x43 \\
-\DWTAGcoarraytypeLL &0x44 \\
-\DWTAGgenericsubrangeLL &0x45 \\
+\DWTAGcoarraytype &0x44 \\
+\DWTAGgenericsubrange &0x45 \\
\livelink{chap:DWXXXlohiuser}{DW\_TAG\_lo\_user}&0x4080 \\
\livelink{chap:DWXXXlohiuser}{DW\_TAG\_hi\_user}&\xffff \\
\end{longtable}
\livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length} \\
\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size} \ddag&0x70&
\livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length} \\
-\DWATrankLL \ddag&0x71&
+\DWATrank~\ddag&0x71&
\livelink{chap:DWATrank}{constant, exprloc}\addtoindexx{rank attribute!encoding} \\
\livelink{chap:DWXXXlohiuser}{DW\_AT\_lo\_user}&0x2000 & --- \addtoindexx{low user attribute encoding} \\
\livelink{chap:DWXXXlohiuser}{DW\_AT\_hi\_user}&\xiiifff& --- \addtoindexx{high user attribute encoding} \\
% Definitions for each of the DWARF names
-% These eliminate the need to use escapes for the underscores and
+% These eliminate the need to use escapes for the underscores or
% add entries for indexing
%
-% A command to define a pair of name commands
-%
-%\newcommand{\newnamecommands}[2]{
-% \newcommand{\#1} {\addtoindex{#2}}
-% \newcommand{\#1 LL}{\livelink{chap:#1}{#2}}
-% }
+% A command to define multiple helpful DWARF name commands
+%
+\newcommand{\newdwfnamecommands}[2]{
+ \expandafter\def\csname #1LINK\endcsname{\index{#2}\hyperlink{chap:#1}{#2}}
+ \expandafter\def\csname #1TARG\endcsname{\index{#2}\hypertarget{chap:#1}{#2}}
+ \expandafter\def\csname #1INDX\endcsname{\index{#2}#2}
+ \expandafter\def\csname #1NAME\endcsname{#2}
+ % The normal, most common use in running text...
+ \expandafter\def\csname #1\endcsname{\csname #1LINK\endcsname}
+ }
% DW_AT
%
-\newcommand{\DWATbitsize} {\addtoindex {DW\_AT\_bit\_size}}
-\newcommand{\DWATbitsizeLL}{\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}}
-\newcommand{\DWATbytesize} {\addtoindex {DW\_AT\_byte\_size}}
-\newcommand{\DWATbytesizeLL}{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}}
-\newcommand{\DWATbytestride} {\addtoindex {DW\_AT\_byte\_stride}}
-\newcommand{\DWATbytestrideLL}{\livelink{chap:DWATbytestride}{DW\_AT\_byte\_stride}}
-\newcommand{\DWATdatalocation} {\addtoindex {DW\_AT\_data\_location}}
-\newcommand{\DWATdatalocationLL}{\livelink{chap:DWATdatalocation}{DW\_AT\_data\_location}}
-\newcommand{\DWATlocation} {\addtoindex {DW\_AT\_location}}
-\newcommand{\DWATlocationLL}{\livelink{chap:DWATlocation}{DW\_AT\_location}}
-\newcommand{\DWATlowerbound} {\addtoindex {DW\_AT\_lower\_bound}}
-\newcommand{\DWATlowerboundLL}{\livelink{chap:DWATlowerbound}{DW\_AT\_lower\_bound}}
-\newcommand{\DWATmacroinfo} {\addtoindex {DW\_AT\_macro\_info}}
-\newcommand{\DWATmacroinfoLL}{\livelink{chap:DWATmacroinfo}{DW\_AT\_macro\_info}}
-\newcommand{\DWATname} {\addtoindex {DW\_AT\_name}}
-\newcommand{\DWATnameLL}{\livelink{chap:DWATname}{DW\_AT\_name}}
-\newcommand{\DWATordering} {\addtoindex {DW\_AT\_ordering}}
-\newcommand{\DWATorderingLL}{\livelink{chap:DWATordering}{DW\_AT\_ordering}}
-\newcommand{\DWATranges} {\addtoindex {DW\_AT\_ranges}}
-\newcommand{\DWATrangesLL}{\livelink{chap:DWATranges}{DW\_AT\_ranges}}
-\newcommand{\DWATrank}{\addtoindex {DW\_AT\_rank}}
-\newcommand{\DWATrankLL}{\livelink{chap:DWATrank}{DW\_AT\_rank}}
-\newcommand{\DWATsibling} {\addtoindexx {DW\_AT\_sibling}}
-\newcommand{\DWATsiblingLL}{\livelink{chap:DWATsibling}{DW\_AT\_sibling}}
-\newcommand{\DWATstmtlist} {\addtoindex {DW\_AT\_stmt\_list}}
-\newcommand{\DWATstmtlistLL}{\livelink{chap:DWATstmtlist}{DW\_AT\_stmt\_list}}
-\newcommand{\DWATstringlength} {\addtoindex {DW\_AT\_string\_length}}
-\newcommand{\DWATstringlengthLL}{\livelink{chap:DWATstringlength}{DW\_AT\_string\_length}}
-\newcommand{\DWATstringlengthbitsize} {\addtoindex {DW\_AT\_string\_length\_bit\_size}}
-\newcommand{\DWATstringlengthbitsizeLL}{\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size}}
-\newcommand{\DWATstringlengthbytesize} {\addtoindex {DW\_AT\_string\_length\_byte\_size}}
-\newcommand{\DWATstringlengthbytesizeLL}{\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size}}
-\newcommand{\DWATtype} {\addtoindex {DW\_AT\_type}}
-\newcommand{\DWATtypeLL}{\livelink{chap:DWATtype}{DW\_AT\_type}}
-\newcommand{\DWATupperbound} {\addtoindex {DW\_AT\_upper\_bound}}
-\newcommand{\DWATupperboundLL}{\livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound}}
+\newdwfnamecommands{DWATbitsize}{DW\_AT\_bit\_size}
+\newdwfnamecommands{DWATbytesize}{DW\_AT\_byte\_size}
+\newdwfnamecommands{DWATbytestride}{DW\_AT\_byte\_stride}
+\newdwfnamecommands{DWATdatalocation}{DW\_AT\_data\_location}
+\newdwfnamecommands{DWATlocation}{DW\_AT\_location}
+\newdwfnamecommands{DWATlowerbound}{DW\_AT\_lower\_bound}
+\newdwfnamecommands{DWATmacroinfo}{DW\_AT\_macro\_info}
+\newdwfnamecommands{DWATname}{DW\_AT\_name}
+\newdwfnamecommands{DWATordering}{DW\_AT\_ordering}
+\newdwfnamecommands{DWATranges}{DW\_AT\_ranges}
+\newdwfnamecommands{DWATrank}{DW\_AT\_rank}
+\newdwfnamecommands{DWATsibling}{DW\_AT\_sibling}
+\newdwfnamecommands{DWATstmtlist}{DW\_AT\_stmt\_list}
+\newdwfnamecommands{DWATstringlength}{DW\_AT\_string\_length}
+\newdwfnamecommands{DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size}
+\newdwfnamecommands{DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size}
+\newdwfnamecommands{DWATtype}{DW\_AT\_type}
+\newdwfnamecommands{DWATupperbound}{DW\_AT\_upper\_bound}
%
% DW_FORM
%
-\newcommand{\DWFORMrefsigeight}{\addtoindex{DW\_FORM\_ref\_sig8}}
-\newcommand{\DWFORMstrp}[1][]{\addtoindex{DW\_FORM\_strp}}
+\newdwfnamecommands{DWFORMrefsigeight}{DW\_FORM\_ref\_sig8}
+\newdwfnamecommands{DWFORMstrp}{DW\_FORM\_strp}
%
% DW_LANG
%
-\newcommand{\DWLANGGo}{\addtoindex{DW\_LANG\_Go}}
-\newcommand{\DWLANGHaskell}{\addtoindex{DW\_LANG\_Haskell}}
-\newcommand{\DWLANGModulaThree}{\addtoindex{DW\_LANG\_Modula3}}
-\newcommand{\DWLANGOpenCL}{\addtoindex{DW\_LANG\_OpenCL}}
+\newdwfnamecommands{DWLANGGo}{DW\_LANG\_Go}
+\newdwfnamecommands{DWLANGHaskell}{DW\_LANG\_Haskell}
+\newdwfnamecommands{DWLANGModulaThree}{DW\_LANG\_Modula3}
+\newdwfnamecommands{DWLANGOpenCL}{DW\_LANG\_OpenCL}
%
% DW_OP
%
-\newcommand{\DWOPcallref} {\addtoindex {DW\_OP\_call\_ref}}
-\newcommand{\DWOPcallrefLL}{\livelink{chap:DWOPcallref}{DW\_OP\_call\_ref}}
-\newcommand{\DWOPconst} {\addtoindex {DW\_OP\_const}}
-\newcommand{\DWOPconstLL}{\livelink{chap:DWOPconst}{DW\_OP\_const}}
-\newcommand{\DWOPderef} {\addtoindex {DW\_OP\_deref}}
-\newcommand{\DWOPderefLL}{\livelink{chap:DWOPderef}{DW\_OP\_deref}}
-\newcommand{\DWOPformtlsaddress} {\addtoindex {DW\_OP\_form\_tls\_address}}
-\newcommand{\DWOPformtlsaddressLL}{\livelink{chap:DWOPformtlsaddress}{DW\_OP\_form\_tls\_address}}
-\newcommand{\DWOPlit} {\addtoindex {DW\_OP\_lit}}
-\newcommand{\DWOPlitLL}{\livelink{chap:DWOPlit}{DW\_OP\_lit}}
-\newcommand{\DWOPmult} {\addtoindex {DW\_OP\_mult}}
-\newcommand{\DWOPmultLL}{\livelink{chap:DWOPmult}{DW\_OP\_mult}}
-\newcommand{\DWOPplus} {\addtoindex {DW\_OP\_plus}}
-\newcommand{\DWOPplusLL}{\livelink{chap:DWOPplus}{DW\_OP\_plus}}
-\newcommand{\DWOPpushobjectaddress} {\addtoindex {DW\_OP\_push\_object\_address}}
-\newcommand{\DWOPpushobjectaddressLL}{\livelink{chap:DWOPpushobjectaddress}{DW\_OP\_push\_object\_address}}
+\newdwfnamecommands{DWOPcallref}{DW\_OP\_call\_ref}
+\newdwfnamecommands{DWOPconst}{DW\_OP\_const}
+\newdwfnamecommands{DWOPderef}{DW\_OP\_deref}
+\newdwfnamecommands{DWOPformtlsaddress}{DW\_OP\_form\_tls\_address}
+\newdwfnamecommands{DWOPlit}{DW\_OP\_lit}
+\newdwfnamecommands{DWOPmult}{DW\_OP\_mult}
+\newdwfnamecommands{DWOPplus}{DW\_OP\_plus}
+\newdwfnamecommands{DWOPpushobjectaddress}{DW\_OP\_push\_object\_address}
%
% DW_ORD
%
-\newcommand{\DWORDcolmajor} {\addtoindex {DW\_ORD\_col\_major}}
-\newcommand{\DWORDcolmajorLL}{\livelink{chap:DWORDcolmajor}{DW\_ORD\_col\_major}}
-\newcommand{\DWORDrowmajor} {\addtoindex {DW\_ORD\_row\_major}}
-\newcommand{\DWORDrowmajorLL}{\livelink{chap:DWORDrowmajor}{DW\_ORD\_row\_major}}
+\newdwfnamecommands{DWORDcolmajor}{DW\_ORD\_col\_major}
+\newdwfnamecommands{DWORDrowmajor}{DW\_ORD\_row\_major}
%
% DW_TAG
%
-\newcommand{\DWTAGarraytype} {\addtoindex {DW\_TAG\_array\_type}}
-\newcommand{\DWTAGarraytypeLL}{\livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}}
-\newcommand{\DWTAGcoarraytype} {\addtoindex {DW\_TAG\_coarray\_type}}
-\newcommand{\DWTAGcoarraytypeLL}{\livelink{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type}}
-\newcommand{\DWTAGgenericsubrange} {\addtoindex {DW\_TAG\_generic\_subrange}}
-\newcommand{\DWTAGgenericsubrangeLL}{\livelink{chap:DWTAGgenericsubtype}{DW\_TAG\_generic\_subrange}}
-\newcommand{\DWTAGmember} {\addtoindex {DW\_TAG\_member}}
-\newcommand{\DWTAGmemberLL}{\livelink{chap:DWTAGmember}{DW\_TAG\_member}}
-\newcommand{\DWTAGsubrangetype} {\addtoindex {DW\_TAG\_subrange\_type}}
-\newcommand{\DWTAGsubrangetypeLL}{\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}}
-\newcommand{\DWTAGvariable} {\addtoindex {DW\_TAG\_variable}}
-\newcommand{\DWTAGvariableLL}{\livelink{chap:DWTAGvariable}{DW\_TAG\_variable}}
+\newdwfnamecommands{DWTAGarraytype}{DW\_TAG\_array\_type}
+\newdwfnamecommands{DWTAGcoarraytype}{DW\_TAG\_coarray\_type}
+\newdwfnamecommands{DWTAGgenericsubrange}{DW\_TAG\_generic\_subrange}
+\newdwfnamecommands{DWTAGmember}{DW\_TAG\_member}
+\newdwfnamecommands{DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
+\newdwfnamecommands{DWTAGvariable}{DW\_TAG\_variable}
%
% .debug, et al
%
\begin{figure}[!h]
\begin{dwflisting}
\begin{alltt}
-10\$: \DWTAGcoarraytypeLL
- \DWATtypeLL(reference to INTEGER)
- \DWTAGsubrangetypeLL ! Note omitted upper bound
- \DWATlowerboundLL(constant 1)
-
-11\$: \DWTAGvariableLL
- \DWATnameLL("X")
- \DWATtypeLL(reference to coarray type at 10\$)
+10\$: \DWTAGcoarraytype
+ \DWATtype(reference to INTEGER)
+ \DWTAGsubrangetype ! Note omitted upper bound
+ \DWATlowerbound(constant 1)
+
+11\$: \DWTAGvariable
+ \DWATname("X")
+ \DWATtype(reference to coarray type at 10\$)
\end{alltt}
\end{dwflisting}
\caption{Fortran scalar coarray: DWARF description}
\begin{figure}[here]
\begin{dwflisting}
\begin{alltt}
-10\$: \DWTAGarraytypeLL
- \DWATorderingLL(\DWORDcolmajorLL)
- \DWATtypeLL(reference to INTEGER)
-11\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 10)
-
-12\$: \DWTAGcoarraytypeLL
- \DWATtypeLL(reference to array type at 10\$)
-13\$: \DWTAGsubrangetypeLL ! Note omitted upper bound
- \DWATlowerboundLL(constant 1)
-
-14$: \DWTAGvariableLL
- \DWATnameLL("X")
- \DWATtypeLL(reference to coarray type at 12\$)
+10\$: \DWTAGarraytype
+ \DWATordering(\DWORDcolmajor)
+ \DWATtype(reference to INTEGER)
+11\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 10)
+
+12\$: \DWTAGcoarraytype
+ \DWATtype(reference to array type at 10\$)
+13\$: \DWTAGsubrangetype ! Note omitted upper bound
+ \DWATlowerbound(constant 1)
+
+14$: \DWTAGvariable
+ \DWATname("X")
+ \DWATtype(reference to coarray type at 12\$)
\end{alltt}
\end{dwflisting}
\caption{Fortran array coarray: DWARF description}
\begin{figure}[here]
\begin{dwflisting}
\begin{alltt}
-10\$: \DWTAGarraytypeLL
- \DWATorderingLL(\DWORDcolmajorLL)
- \DWATtypeLL(reference to INTEGER)
-11\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 10)
-12\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 11)
-13\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 12)
-
-14\$: \DWTAGcoarraytypeLL
- \DWATtypeLL(reference to array_type at 10\$)
-15\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 2)
-16\$: \DWTAGsubrangetypeLL
- \DWATlowerboundLL(constant 1)
- \DWATupperboundLL(constant 3)
-17\$: \DWTAGsubrangetypeLL ! Note omitted upper bound
- \DWATlowerboundLL(constant 1)
-
-18\$: \DWTAGvariableLL
- \DWATnameLL("X")
- \DWATtypeLL(reference to coarray type at 14\$)
+10\$: \DWTAGarraytype
+ \DWATordering(\DWORDcolmajor)
+ \DWATtype(reference to INTEGER)
+11\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 10)
+12\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 11)
+13\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 12)
+
+14\$: \DWTAGcoarraytype
+ \DWATtype(reference to array_type at 10\$)
+15\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 2)
+16\$: \DWTAGsubrangetype
+ \DWATlowerbound(constant 1)
+ \DWATupperbound(constant 3)
+17\$: \DWTAGsubrangetype ! Note omitted upper bound
+ \DWATlowerbound(constant 1)
+
+18\$: \DWTAGvariable
+ \DWATname("X")
+ \DWATtype(reference to coarray type at 14\$)
\end{alltt}
\end{dwflisting}
\caption{Fortran multidimensional coarray: DWARF description}
\begin{figure}[!h]
\begin{dwflisting}
\begin{alltt}
-10\$: \DWTAGarraytypeLL
- \DWATtypeLL(reference to real)
- \DWATrankLL(expression=
- \DWOPpushobjectaddressLL
- \DWOPlitLL<offset of rank in descriptor>
- \DWOPplusLL
- \DWOPderefLL)
- \DWATdatalocationLL(expression=
- \DWOPpushobjectaddressLL
- \DWOPlitLL<offset of data in descriptor>
- \DWOPplusLL
- \DWOPderefLL)
-11\$: \DWTAGgenericsubrangeLL
- \DWATtypeLL(reference to integer)
- \DWATlowerboundLL(expression=
+10\$: \DWTAGarraytype
+ \DWATtype(reference to real)
+ \DWATrank(expression=
+ \DWOPpushobjectaddress
+ \DWOPlit<offset of rank in descriptor>
+ \DWOPplus
+ \DWOPderef)
+ \DWATdatalocation(expression=
+ \DWOPpushobjectaddress
+ \DWOPlit<offset of data in descriptor>
+ \DWOPplus
+ \DWOPderef)
+11\$: \DWTAGgenericsubrange
+ \DWATtype(reference to integer)
+ \DWATlowerbound(expression=
! Looks up the lower bound of dimension i.
! Operation ! Stack effect
! (implicit) ! i
- \DWOPlitLL<byte size of struct dim> ! i sizeof(dim)
- \DWOPmultLL ! dim[i]
- \DWOPlitLL<offset of dim in descriptor> ! dim[i] offset
- \DWOPplusLL ! dim[i]+offset
- \DWOPpushobjectaddressLL ! dim[i]+offset objptr
- \DWOPplusLL ! objptr.dim[i]
- \DWOPlitLL<offset of lowerbound in dim> ! objptr.dim[i] offset
- \DWOPplusLL ! objptr.dim[i].lowerbound
- \DWOPderefLL) ! *objptr.dim[i].lowerbound
- \livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound}(expression=
+ \DWOPlit<byte size of struct dim> ! i sizeof(dim)
+ \DWOPmult ! dim[i]
+ \DWOPlit<offset of dim in descriptor> ! dim[i] offset
+ \DWOPplus ! dim[i]+offset
+ \DWOPpushobjectaddress ! dim[i]+offset objptr
+ \DWOPplus ! objptr.dim[i]
+ \DWOPlit<offset of lowerbound in dim> ! objptr.dim[i] offset
+ \DWOPplus ! objptr.dim[i].lowerbound
+ \DWOPderef) ! *objptr.dim[i].lowerbound
+ \DWATupperbound(expression=
! Looks up the upper bound of dimension i.
- \DWOPlitLL<byte size of dim>
- \DWOPmultLL
- \DWOPlitLL<offset of dim in descriptor>
- \DWOPplusLL
- \DWOPpushobjectaddressLL
- \DWOPplusLL
- \DWOPlitLL<offset of upperbound in dim>
- \DWOPplusLL
- \DWOPderefLL)
- \DWATbytestrideLL(expression=
+ \DWOPlit<byte size of dim>
+ \DWOPmult
+ \DWOPlit<offset of dim in descriptor>
+ \DWOPplus
+ \DWOPpushobjectaddress
+ \DWOPplus
+ \DWOPlit<offset of upperbound in dim>
+ \DWOPplus
+ \DWOPderef)
+ \DWATbytestride(expression=
! Looks up the byte stride of dimension i.
...
! (analogous to DW\_AT\_upper\_bound)
The layout of the array descriptor is not specified by the Fortran
standard unless the array is explicitly marked as \addtoindex{C-interoperable}. To
get the bounds of an assumed-rank array, the expressions in the
-\DWTAGgenericsubrangeLL
+\DWTAGgenericsubrange
entry need to be evaluated for each of the
-\DWATrankLL dimensions as shown by the pseudocode in
+\DWATrank{} dimensions as shown by the pseudocode in
Figure~\refersec{fig:assumedrankdwarfparser}.
\begin{figure}[!h]
\livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type},
\livelink{chap:DWTAGcatchblock}{DW\_TAG\_catch\_block},
\livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type},
-\DWTAGcoarraytypeLL,
+\DWTAGcoarraytype,
\livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block},
\livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion},
\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit},
\livelink{chap:DWTAGfiletype}{DW\_TAG\_file\_type},
\livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter},
\livelink{chap:DWTAGfriend}{DW\_TAG\_friend},
-\DWTAGgenericsubrangeLL,
+\DWTAGgenericsubrange,
\livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration},
\livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module},
\livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit},
&\livelinki{chap:DWATpurepurepropertyofasubroutine}{Pure property of a subroutine}{pure property of a subroutine} \\
\livetarg{chap:DWATranges}{DW\_AT\_ranges}
&\livelinki{chap:DWATrangesnoncontiguousrangeofcodeaddresses}{Non-contiguous range of code addresses}{non-contiguous range of code addresses} \\
-\livetarg{chap:DWATrank}{DW\_AT\_rank}
+\DWATrankTARG
&\livelinki{chap:DWATrankofdynamicarray}{Dynamic number of array dimensions}{dynamic number of array dimensions} \\
\livetarg{chap:DWATrecursive}{DW\_AT\_recursive}
&\livelinki{chap:DWATrecursiverecursivepropertyofasubroutine}{Recursive property of a subroutine}{recursive property of a subroutine} \\
\livelink{chap:DWATbytestride}{DW\_AT\_byte\_stride},
\livelink{chap:DWATcount}{DW\_AT\_count},
\livelink{chap:DWATlowerbound}{DW\_AT\_lower\_bound},
-\DWATrankLL,
+\DWATrank,
\livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound},
(and possibly others).}
Alternatively, for an array with dynamic rank the array dimensions
are described by a debugging information entry with the tag
-\livetarg{chap:DWTAGgenericsubrange}{DW\_TAG\_generic\_subrange}.
+\DWTAGgenericsubrangeTARG.
This entry has the same attributes as a
-\livelink{DWTAGsubrangetype}{DW\_TAG\_subrange\_type} entry; however,
-there is just one \DWTAGgenericsubrange{} entry and it describes all of the
+\DWTAGsubrangetype{} entry; however,
+there is just one \DWTAGgenericsubrangeNAME{} entry and it describes all of the
dimensions of the array.
-If \DWTAGgenericsubrange{}
+If \DWTAGgenericsubrangeNAME{}
is used, the number of dimensions must be specified using a
-\DWATrankLL{} attribute. See also Section
+\DWATrank{} attribute. See also Section
\refersec{chap:DWATrank}.
}
A coarray type is represented by a debugging information entry
-with the tag \DWTAGcoarraytype.
+with the tag \DWTAGcoarraytypeTARG.
If a name has been given to the
coarray type in the source, then the corresponding coarray type
-entry has a \DWATnameLL{} attribute whose value is a null-terminated
+entry has a \DWATname{} attribute whose value is a null-terminated
string containing the array type name as it appears in the source
program.
-A coarray entry has one or more \DWTAGsubrangetypeLL{} child entries,
-one for each codimension. It also has a \DWATtypeLL{} attribute
+A coarray entry has one or more \DWTAGsubrangetype{} child entries,
+one for each codimension. It also has a \DWATtype{} attribute
describing the type of each element of the coarray.
\textit{In a coarray application, the run-time number of processes in the application
is part of the coindex calculation. It is represented in the Fortran source by
a coindex which is declared with a \doublequote{*} as the upper bound. To express this
-concept in DWARF, the \DWTAGsubrangetypeLL{} child entry for that index has
+concept in DWARF, the \DWTAGsubrangetype{} child entry for that index has
only a lower bound and no upper bound.}
\textit{How coarray elements are located and how coindices are
string containing the subrange type name as it appears in
the source program.
-The tag \DWTAGgenericsubrangeLL is
+The tag \DWTAGgenericsubrange{} is
used to describe arrays with a dynamic rank. See Section
\refersec{chap:DWTAGgenericsubrange}.
or a location expression whose evaluation yields the dynamic rank.
The bounds of an array with dynamic rank are described using the
-\DWTAGgenericsubrangeLL{} tag, which
+\DWTAGgenericsubrangeTARG{} tag, which
is the dynamic rank array equivalent of
-\DWTAGsubrangetypeLL. The
-difference is that a \DWTAGgenericsubrangeLL{} contains generic
+\DWTAGsubrangetype. The
+difference is that a \DWTAGgenericsubrange{} contains generic
lower/upper bound and stride expressions that need to be evaluated for
each dimension: Before any expression contained in a
\DWTAGgenericsubrange{} can be evaluated, the dimension for which the