This patch is the LLVM part of fixing the issues, described in https://bugs.llvm.org/show_bug.cgi?id=36168
- The representation of enumerator values in the debug info metadata now contains a boolean flag isUnsigned, which determines how the bits of the value are interpreted.
- The DW_TAG_enumeration type DIE now always (for DWARF version >= 3) includes a DW_AT_type attribute, which refers to the underlying integer type, as suggested in DWARFv4 (5.7 Enumeration Type Entries).
- The debug info metadata for enumeration type contains (in flags) indication whether this is a C++11 "fixed enum".
- For C++11 enumeration with a fixed underlying type, the DIE also includes the DW_AT_enum_class attribute (for DWARF version >= 4).
- Encoding of enumerator constants uses DW_FORM_sdata for signed values and DW_FORM_udata for unsigned values, as suggested by DWARFv4 (7.5.4 Attribute Encodings).
The changes should be backwards compatible:
- the isUnsigned attribute is optional and defaults to false.
- if the underlying type for the enumeration is not available, the enumerator values are considered signed.
- the FixedEnum flag defaults to clear.
- the bitcode format for DIEnumerator stores the unsigned flag bit #1 of the first record element, so the format does not change and the zero previously stored there is consistent with the false default for IsUnsigned.
There are corresponding changes to clang (I'll submit them shortly), however this patch in isolation
ought to not break build or introduce regressions.
Talking about this assertion.