From f35a82384d9ebeff3bb5ffd7a5ebe30436c1b401 Mon Sep 17 00:00:00 2001 From: Andy Yankovsky Date: Tue, 3 Nov 2020 10:32:42 -0800 Subject: [PATCH] Return actual type from SBType::GetArrayElementType SBType::GetArrayElementType should return the actual type, not the canonical type (e.g. int32_t, not the underlying int). Added a test case to validate the new behavior. I also ran all other tests on Linux (ninja check-lldb), they all pass. Differential revision: https://reviews.llvm.org/D90318 --- lldb/source/API/SBType.cpp | 6 ++---- lldb/test/API/python_api/type/TestTypeList.py | 13 +++++++++++++ lldb/test/API/python_api/type/main.cpp | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lldb/source/API/SBType.cpp b/lldb/source/API/SBType.cpp index 772ac87..0a99ac0 100644 --- a/lldb/source/API/SBType.cpp +++ b/lldb/source/API/SBType.cpp @@ -213,10 +213,8 @@ SBType SBType::GetArrayElementType() { if (!IsValid()) return LLDB_RECORD_RESULT(SBType()); - CompilerType canonical_type = - m_opaque_sp->GetCompilerType(true).GetCanonicalType(); - return LLDB_RECORD_RESULT(SBType( - TypeImplSP(new TypeImpl(canonical_type.GetArrayElementType(nullptr))))); + return LLDB_RECORD_RESULT(SBType(TypeImplSP(new TypeImpl( + m_opaque_sp->GetCompilerType(true).GetArrayElementType(nullptr))))); } SBType SBType::GetArrayType(uint64_t size) { diff --git a/lldb/test/API/python_api/type/TestTypeList.py b/lldb/test/API/python_api/type/TestTypeList.py index 75a793a..901ddc6 100644 --- a/lldb/test/API/python_api/type/TestTypeList.py +++ b/lldb/test/API/python_api/type/TestTypeList.py @@ -131,3 +131,16 @@ class TypeAndTypeListTestCase(TestBase): # (lldb-enumerations.h). int_type = id_type.GetBasicType(lldb.eBasicTypeInt) self.assertTrue(id_type == int_type) + + # Find 'myint_arr' and check the array element type. + myint_arr = frame0.FindVariable('myint_arr') + self.assertTrue(myint_arr, VALID_VARIABLE) + self.DebugSBValue(myint_arr) + myint_arr_type = myint_arr.GetType() + self.DebugSBType(myint_arr_type) + self.assertTrue(myint_arr_type.IsArrayType()) + myint_arr_element_type = myint_arr_type.GetArrayElementType() + self.DebugSBType(myint_arr_element_type) + myint_type = target.FindFirstType('myint') + self.DebugSBType(myint_type) + self.assertTrue(myint_arr_element_type == myint_type) diff --git a/lldb/test/API/python_api/type/main.cpp b/lldb/test/API/python_api/type/main.cpp index 40799ab..13e6bbc 100644 --- a/lldb/test/API/python_api/type/main.cpp +++ b/lldb/test/API/python_api/type/main.cpp @@ -56,5 +56,8 @@ int main (int argc, char const *argv[]) // This corresponds to an empty task list. Task *empty_task_head = new Task(-1, NULL); + typedef int myint; + myint myint_arr[] = {1, 2, 3}; + return 0; // Break at this line } -- 2.7.4