Issue 210218.2: Generalize complex number support
PROBLEM DESCRIPTION
GCC can handle complex integers as well as complex floatingpoint types.
A complex type can be defined using type qualifier '_Complex' with any
floating point or integral type:
_Complex int x;
This extension is GNU specific and not part of ISO C99.
However, DWARF has no way to represent these types, as there is only
DW_ATE_complex_float and DW_ATE_imaginary_float (Section 5.1.1.4 page 106).
Another example of a language that uses integer based complex types is Rust
through the type trait mechanism.
In both cases, the complex type data can be represented with either
floatingpoint, signed integral or unsigned integral numbers.
PROPOSED RESOLUTION
In section 5.1.1.2, "Encoding attribute values", p 105, table 5.1,
"Base type encoding values", add new encoding group at the end of the
table:
Name  Meaning

Complex integral encodings

DW_ATE_complex_signed  complex binary integral number
DW_ATE_imaginary_signed  imaginary binary integral number
DW_ATE_complex_unsigned  complex unsigned binary integral number
DW_ATE_imaginary_unsigned  imaginary unsigned binary integral number
In section 5.1.1, "Base Type Encodings", p 108, line 11, add a new
section with text:
"5.1.1.6 Complex Integral Encodings
Complex types with binary integral encodings (DW_ATE_complex_signed,
DW_ATE_imaginary_signed, DW_ATE_complex_unsigned and
DW_ATE_imaginary_unsigned) are supported in some programming
languages (GNU C and Rust) and are not discussed further."
In section 7.8, "Base Type Attribute Encodings", p 227, table 7.11,
"Base type encoding values", add new encoding values at the end of the
table:

Base type encoding name  Value

DW_ATE_complex_signed  0x0e
DW_ATE_imaginary_signed  0x0f
DW_ATE_complex_unsigned  0x10
DW_ATE_imaginary_unsigned  0x11

20220303: Revised.
20220718: Revised, defining additional base type encodings.
Previous version: http://dwarfstd.org/issues/210218.21.html
20230123: Accepted.