Author: spyffe Date: Fri Sep 30 13:44:43 2016 New Revision: 282898 URL: http://llvm.org/viewvc/llvm-project?rev=282898&view=rev Log: Fixed several i386 Objective-C tests by completing objects, not their pointers.
Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=282898&r1=282897&r2=282898&view=diff ============================================================================== --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original) +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Fri Sep 30 13:44:43 2016 @@ -4463,19 +4463,22 @@ ClangASTContext::GetNumMemberFunctions(l } break; - case clang::Type::ObjCObjectPointer: - if (GetCompleteType(type)) { - const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAsObjCInterfacePointerType(); - if (objc_class_type) { - clang::ObjCInterfaceDecl *class_interface_decl = - objc_class_type->getInterfaceDecl(); - if (class_interface_decl) - num_functions = std::distance(class_interface_decl->meth_begin(), - class_interface_decl->meth_end()); + case clang::Type::ObjCObjectPointer: { + const clang::ObjCObjectPointerType *objc_class_type = + qual_type->getAsObjCInterfacePointerType(); + const clang::ObjCInterfaceType *objc_interface_type = + objc_class_type->getInterfaceType(); + if (objc_interface_type && + GetCompleteType((lldb::opaque_compiler_type_t)objc_interface_type)) { + clang::ObjCInterfaceDecl *class_interface_decl = + objc_interface_type->getDecl(); + if (class_interface_decl) { + num_functions = std::distance(class_interface_decl->meth_begin(), + class_interface_decl->meth_end()); } } break; + } case clang::Type::ObjCObject: case clang::Type::ObjCInterface: @@ -4568,34 +4571,36 @@ ClangASTContext::GetMemberFunctionAtInde } break; - case clang::Type::ObjCObjectPointer: - if (GetCompleteType(type)) { - const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAsObjCInterfacePointerType(); - if (objc_class_type) { - clang::ObjCInterfaceDecl *class_interface_decl = - objc_class_type->getInterfaceDecl(); - if (class_interface_decl) { - auto method_iter = class_interface_decl->meth_begin(); - auto method_end = class_interface_decl->meth_end(); - if (idx < - static_cast<size_t>(std::distance(method_iter, method_end))) { - std::advance(method_iter, idx); - clang::ObjCMethodDecl *objc_method_decl = - method_iter->getCanonicalDecl(); - if (objc_method_decl) { - clang_decl = CompilerDecl(this, objc_method_decl); - name = objc_method_decl->getSelector().getAsString(); - if (objc_method_decl->isClassMethod()) - kind = lldb::eMemberFunctionKindStaticMethod; - else - kind = lldb::eMemberFunctionKindInstanceMethod; - } + case clang::Type::ObjCObjectPointer: { + const clang::ObjCObjectPointerType *objc_class_type = + qual_type->getAsObjCInterfacePointerType(); + const clang::ObjCInterfaceType *objc_interface_type = + objc_class_type->getInterfaceType(); + if (objc_interface_type && + GetCompleteType((lldb::opaque_compiler_type_t)objc_interface_type)) { + clang::ObjCInterfaceDecl *class_interface_decl = + objc_interface_type->getDecl(); + if (class_interface_decl) { + auto method_iter = class_interface_decl->meth_begin(); + auto method_end = class_interface_decl->meth_end(); + if (idx < + static_cast<size_t>(std::distance(method_iter, method_end))) { + std::advance(method_iter, idx); + clang::ObjCMethodDecl *objc_method_decl = + method_iter->getCanonicalDecl(); + if (objc_method_decl) { + clang_decl = CompilerDecl(this, objc_method_decl); + name = objc_method_decl->getSelector().getAsString(); + if (objc_method_decl->isClassMethod()) + kind = lldb::eMemberFunctionKindStaticMethod; + else + kind = lldb::eMemberFunctionKindInstanceMethod; } } } } break; + } case clang::Type::ObjCObject: case clang::Type::ObjCInterface: @@ -5629,19 +5634,21 @@ uint32_t ClangASTContext::GetNumFields(l .GetNumFields(); break; - case clang::Type::ObjCObjectPointer: - if (GetCompleteType(type)) { - const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAsObjCInterfacePointerType(); - if (objc_class_type) { - clang::ObjCInterfaceDecl *class_interface_decl = - objc_class_type->getInterfaceDecl(); - - if (class_interface_decl) - count = class_interface_decl->ivar_size(); + case clang::Type::ObjCObjectPointer: { + const clang::ObjCObjectPointerType *objc_class_type = + qual_type->getAsObjCInterfacePointerType(); + const clang::ObjCInterfaceType *objc_interface_type = + objc_class_type->getInterfaceType(); + if (objc_interface_type && + GetCompleteType((lldb::opaque_compiler_type_t)objc_interface_type)) { + clang::ObjCInterfaceDecl *class_interface_decl = + objc_interface_type->getDecl(); + if (class_interface_decl) { + count = class_interface_decl->ivar_size(); } } break; + } case clang::Type::ObjCObject: case clang::Type::ObjCInterface: @@ -5774,13 +5781,16 @@ CompilerType ClangASTContext::GetFieldAt } break; - case clang::Type::ObjCObjectPointer: - if (GetCompleteType(type)) { - const clang::ObjCObjectPointerType *objc_class_type = - qual_type->getAsObjCInterfacePointerType(); - if (objc_class_type) { - clang::ObjCInterfaceDecl *class_interface_decl = - objc_class_type->getInterfaceDecl(); + case clang::Type::ObjCObjectPointer: { + const clang::ObjCObjectPointerType *objc_class_type = + qual_type->getAsObjCInterfacePointerType(); + const clang::ObjCInterfaceType *objc_interface_type = + objc_class_type->getInterfaceType(); + if (objc_interface_type && + GetCompleteType((lldb::opaque_compiler_type_t)objc_interface_type)) { + clang::ObjCInterfaceDecl *class_interface_decl = + objc_interface_type->getDecl(); + if (class_interface_decl) { return CompilerType( this, GetObjCFieldAtIndex(getASTContext(), class_interface_decl, idx, name, bit_offset_ptr, @@ -5788,6 +5798,7 @@ CompilerType ClangASTContext::GetFieldAt } } break; + } case clang::Type::ObjCObject: case clang::Type::ObjCInterface: _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits