Debug info for enum types
FPC 3.3.1 and before. See also #41019 ## 1 An enum value's ordinal value appears to be signed for FPC. However debug info does not indicate so. Such an indication might be needed to correctly perform comparison `EnumMemerA > EnumMemberB`. Dwarf allows to specify a type for the enum.<br/> Specified in Dwarf-3 and higher: > The enumeration type entry may also have a DW_AT_type attribute which refers to the underlying data type used to implement the enumeration. ## 2 To find the enum-member from the value in an enum-variable it is not needed to know if it is signed or not (afaik).<br/> From Dwarf-2 and higher > Each enumerator entry also has a DW_AT_const_value attribute, whose value is the actual numeric value of the enumerator as represented on the target system. From `as represented on the Target system` I would conclude that it is the same bit-sequence as stored in memory (read according to the targets rules big or little endian). If following that then FPC stores an incorrect value ``` {$PackEnum 1} type Tfoo = (f1=-1, f2=100); ``` leads to (3.3.1 / 64 bit Win) ``` <1><78c>: Abbrev Number: 5 (DW_TAG_enumeration_type) <78d> DW_AT_name : Tfoo <792> DW_AT_byte_size : 1 <2><793>: Abbrev Number: 6 (DW_TAG_enumerator) <794> DW_AT_name : f1 <797> DW_AT_const_value : 0xffffffff <2><79b>: Abbrev Number: 6 (DW_TAG_enumerator) <79c> DW_AT_name : f2 <79f> DW_AT_const_value : 0x64 <2><7a3>: Abbrev Number: 0 ``` The constant value is encoded using `DW_FORM_data_4` 4 bytes / 32 bit with leading 1 bits that are **not** represented in the `actual value`. I would think either `DW_FORM_data_1` or leading 0. Though leading 0 might interfere with the signed-ness, even though the value is know to have a size of 1 byte, and should probably be sign extended from that. ---- May need testing for gdb/lldb.
issue