|001018.1||A||R. Brender||Representation||Unspecified type|
Add a DIE for an unspecified type declaration. The following text is
suggested as a new section:
5.14 Unspecified Type
<i>Some languages have constructs in which a type may be left
unspecified or the absence of a type can be explicitly indicated.</i>
An unspecified (implicit, unknown, ambiguous or nonexistent) type
is represented by a debugging information entry with the tag
DW_TAG_unspecified_type. If a name has been given to the type, then
the corresponding unspecified type entry has a DW_AT_name attribute
whose value is a null-terminated string containing the name.
<i>The interpretation of this debugging information entry
is intentionally left flexible to allow it to be interpreted
appropriately in different languages. For example, in C and C++
the language implementation can provide an unspecified type entry
with the name "void" which can be referenced by the type attribute
of pointer types and typedef declarations for 'void' (see
Sections 5.2 and 5.3, respectively). As another example, in Ada
such an unspecified type entry can be referred to by the type
attribute of an access type where the denoted type is incomplete
(the name is declared as a type but the definition is deferred to
a separate compilation unit).</i>
DWARF requires that DW_TAG_pointer_type have a DW_AT_type attribute
that refers to the DIE for the pointee type. However, without a concrete
DWARF representation for type void, it is unclear how to achieve this
for the C type 'void *'.
Similarly, DWARF requires that DW_TAG_typedef have a DW_AT_type attribute
that refers to the DIE of the type being given another name. However,
without a concrete DWARF representation for type void, it is unclear
how to achieve this for a declaration such as 'typedef void MyVoid;'.
Various other alternatives have been suggested and debated, but none
seems able to win consensus (see the many e-mails over the last four
months that include "void *" in their title).
This proposal meets the needs for a concrete representation of 'void'
and requires no incompatible change to DWARF.