diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -4238,7 +4238,14 @@ if (qual_type->isPointerType()) qual_type = ast->getPointerType( GetFullyUnqualifiedType_Impl(ast, qual_type->getPointeeType())); - else + else if (const ConstantArrayType *arr = + ast->getAsConstantArrayType(qual_type)) { + arr->getElementType(); + qual_type = ast->getConstantArrayType( + GetFullyUnqualifiedType_Impl(ast, arr->getElementType()), + arr->getSize(), arr->getSizeExpr(), arr->getSizeModifier(), + arr->getIndexTypeQualifiers().getAsOpaqueValue()); + } else qual_type = qual_type.getUnqualifiedType(); qual_type.removeLocalConst(); qual_type.removeLocalRestrict(); diff --git a/lldb/unittests/Symbol/TestTypeSystemClang.cpp b/lldb/unittests/Symbol/TestTypeSystemClang.cpp --- a/lldb/unittests/Symbol/TestTypeSystemClang.cpp +++ b/lldb/unittests/Symbol/TestTypeSystemClang.cpp @@ -912,6 +912,22 @@ EXPECT_EQ(method->getDeclName().getObjCSelector().getAsString(), "foo"); } +TEST_F(TestTypeSystemClang, GetFullyUnqualifiedType) { + CompilerType bool_ = m_ast->GetBasicType(eBasicTypeBool); + CompilerType cv_bool = bool_.AddConstModifier().AddVolatileModifier(); + EXPECT_EQ(bool_, cv_bool.GetFullyUnqualifiedType()); + EXPECT_EQ(bool_.GetArrayType(47), + cv_bool.GetArrayType(47).GetFullyUnqualifiedType()); + EXPECT_EQ( + bool_.GetArrayType(42).GetArrayType(47), + cv_bool.GetArrayType(42).GetArrayType(47).GetFullyUnqualifiedType()); + EXPECT_EQ(bool_.GetPointerType(), + cv_bool.GetPointerType().GetFullyUnqualifiedType()); + EXPECT_EQ( + bool_.GetPointerType().GetArrayType(47), + cv_bool.GetPointerType().GetArrayType(47).GetFullyUnqualifiedType()); +} + TEST(TestScratchTypeSystemClang, InferSubASTFromLangOpts) { LangOptions lang_opts; EXPECT_EQ(