[Lldb-commits] [PATCH] D134493: [lldb][TypeSystemClang] Deduce lldb::eEncodingUint for unsigned enum types
Michael Buch via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 23 03:27:58 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd5d904285008: [lldb][TypeSystemClang] Deduce lldb::eEncodingUint for unsigned enum types (authored by Michael137).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134493/new/
https://reviews.llvm.org/D134493
Files:
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/TestSBValueUnsignedEnumBitField.py
lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/main.cpp
Index: lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/main.cpp
===================================================================
--- /dev/null
+++ lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/main.cpp
@@ -0,0 +1,14 @@
+#include <stdint.h>
+
+enum class EnumVals : uint16_t { VAL0 = 0 };
+
+struct Foo {
+ EnumVals b : 4;
+};
+
+int main(int argc, char const *argv[], char const *envp[]) {
+ Foo f{.b = static_cast<EnumVals>(8)};
+ return 0; //% b = self.frame().FindVariable("f").GetChildMemberWithName("b")
+ //% val = b.GetValueAsUnsigned()
+ //% self.assertEqual(val, 8, "Bit-field not correctly extracted")
+}
Index: lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/TestSBValueUnsignedEnumBitField.py
===================================================================
--- /dev/null
+++ lldb/test/API/python_api/sbvalue_unsigned_enum_bitfield_value/TestSBValueUnsignedEnumBitField.py
@@ -0,0 +1,18 @@
+"""
+Test that SBValue doesn't incorrectly sign-extend
+the Scalar value of a bitfield that has an unsigned
+enum type.
+
+We test this by assigning to a bit-field a value
+that is out-of-range of it's signed counterpart.
+I.e., with a bit-field of width 4, assigning
+8 to it would be out-of-range if we treated it
+as a signed. If LLDB were to sign-extend the Scalar
+(which shouldn't happen for unsigned bit-fields)
+it would left-fill the result with 1s; we test
+for this not to happen.
+"""
+
+import lldbsuite.test.lldbinline as lldbinline
+
+lldbinline.MakeInlineTest(__file__, globals())
Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
===================================================================
--- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -5097,7 +5097,9 @@
case clang::Type::Record:
break;
case clang::Type::Enum:
- return lldb::eEncodingSint;
+ return qual_type->isUnsignedIntegerOrEnumerationType()
+ ? lldb::eEncodingUint
+ : lldb::eEncodingSint;
case clang::Type::DependentSizedArray:
case clang::Type::DependentSizedExtVector:
case clang::Type::UnresolvedUsing:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134493.462436.patch
Type: text/x-patch
Size: 2215 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220923/50d2dca5/attachment-0001.bin>
More information about the lldb-commits
mailing list