summaryrefslogtreecommitdiff
path: root/lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value
AgeCommit message (Collapse)Author
2023-05-25[NFC][Py Reformat] Reformat python files in lldbJonas Devlieghere
This is an ongoing series of commits that are reformatting our Python code. Reformatting is done with `black` (23.1.0). If you end up having problems merging this commit because you have made changes to a python file, the best way to handle that is to run `git checkout --ours <yourfile>` and then reformat it with black. RFC: https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style Differential revision: https://reviews.llvm.org/D151460
2022-09-27[lldb][test] Disable TestSBValueUnsignedEnumBitField.py for old DWARF versionsMichael Buch
With older DWARF versions we don't encode the enum's underlying type in DWARF. In those cases LLDB sign-extends the bitfield as a signed integer. Without the actual enum type being present in DWARF there's not much we can do. Differential Revision: https://reviews.llvm.org/D134734
2022-09-23[lldb][TypeSystemClang] Deduce lldb::eEncodingUint for unsigned enum typesMichael Buch
The motivating issue was the following: ``` $ cat main.cpp enum class EnumVals : uint16_t { VAL1 = 0 }; struct Foo { EnumVals b1 : 4; }; int main() { // Assign value out-of-range if // bit-field were signed Foo f{.b1 = (EnumVals)8}; return 0; // Break here } (lldb) script >>> lldb.frame.FindVariable("f").GetChildMemberWithName("b1").GetValueAsUnsigned() 4294967288 ``` In the above example we observe a unsigned integer wrap-around because we sign-extended the bit-fields underlying Scalar value before casting it to an unsigned. The sign extension occurs because we don't mark APSInt::IsUnsigned == true correctly when extracting the value from memory (in Value::ResolveValue). The reason why sign extension causes the wraparound is that the value we're assigning to the bit-field is out-of-range (if it were a signed bit-field), which causes `Scalar::sext` to left-fill the Scalar with 1s. This patch corrects GetEncoding to account for unsigned enum types. With this change the Scalar would be zero-extended instead. This is mainly a convenience fix which well-formed code wouldn't encounter. rdar://99785324 Differential Revision: https://reviews.llvm.org/D134493