Index: clang/lib/AST/DeclPrinter.cpp =================================================================== --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -155,9 +155,12 @@ BaseType = PTy->getPointeeType(); else if (const BlockPointerType *BPy = BaseType->getAs()) BaseType = BPy->getPointeeType(); - else if (const ArrayType* ATy = dyn_cast(BaseType)) + else if (const ObjCObjectPointerType *OPT = + BaseType->getAs()) + BaseType = OPT->getPointeeType(); + else if (const ArrayType *ATy = dyn_cast(BaseType)) BaseType = ATy->getElementType(); - else if (const FunctionType* FTy = BaseType->getAs()) + else if (const FunctionType *FTy = BaseType->getAs()) BaseType = FTy->getReturnType(); else if (const VectorType *VTy = BaseType->getAs()) BaseType = VTy->getElementType(); Index: clang/lib/AST/Type.cpp =================================================================== --- clang/lib/AST/Type.cpp +++ clang/lib/AST/Type.cpp @@ -2785,7 +2785,6 @@ case DependentTemplateSpecialization: case ObjCInterface: case ObjCObject: - case ObjCObjectPointer: // FIXME: object pointers aren't really specifiers return true; default: return false; Index: clang/lib/AST/TypePrinter.cpp =================================================================== --- clang/lib/AST/TypePrinter.cpp +++ clang/lib/AST/TypePrinter.cpp @@ -303,7 +303,6 @@ SaveAndRestore PrevPHIsEmpty(HasEmptyPlaceHolder); // Print qualifiers as appropriate. - bool CanPrefixQualifiers = false; bool NeedARCStrongQualifier = false; CanPrefixQualifiers = canPrefixQualifiers(T, NeedARCStrongQualifier);