Index: lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/TestObjCProperty.py =================================================================== --- lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/TestObjCProperty.py +++ lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/TestObjCProperty.py @@ -110,6 +110,11 @@ self.assertTrue(backed_value.GetValueAsUnsigned(12345) == backing_value.GetValueAsUnsigned(23456)) + value_from_typedef = frame.EvaluateExpression("typedefd.backedInt", False) + self.assertTrue(value_from_typedef.GetError().Success()) + self.assertEqual(value_from_typedef.GetValueAsUnsigned(12345), + backing_value.GetValueAsUnsigned(23456)) + unbacked_value = frame.EvaluateExpression("mine.unbackedInt", False) unbacked_error = unbacked_value.GetError() self.assertTrue(unbacked_error.Success()) Index: lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/main.m =================================================================== --- lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/main.m +++ lldb/packages/Python/lldbsuite/test/lang/objc/objc-property/main.m @@ -87,10 +87,13 @@ } @end +typedef BaseClass TypedefBaseClass; + int main () { BaseClass *mine = [BaseClass baseClassWithBackedInt: 10 andUnbackedInt: 20]; + TypedefBaseClass *typedefd = mine; // Set a breakpoint here. int nonexistant = mine.nonexistantInt; Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp =================================================================== --- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -4259,8 +4259,7 @@ if (type) { clang::QualType qual_type(GetQualType(type)); - const clang::Type::TypeClass type_class = qual_type->getTypeClass(); - switch (type_class) { + switch (qual_type.getDesugaredType(getASTContext())->getTypeClass()) { case clang::Type::ObjCObject: case clang::Type::ObjCInterface: return GetType(getASTContext().getObjCObjectPointerType(qual_type));