[libclang] Report CXType_ObjCId for 'const id', not CXType_Typedef.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 23 May 2012 23:30:16 +0000 (23:30 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 23 May 2012 23:30:16 +0000 (23:30 +0000)
rdar://11357807

llvm-svn: 157356

clang/test/Index/print-typekind.m
clang/tools/libclang/CXType.cpp

index 9eafd24..565c5e3 100644 (file)
@@ -1,10 +1,10 @@
 @interface Foo
 @property (readonly) id x;
 -(int) mymethod;
--(int) mymethod2:(id)x blah:(Class)y boo:(SEL)z;
+-(const id) mymethod2:(id)x blah:(Class)y boo:(SEL)z;
 @end
 
 // RUN: c-index-test -test-print-typekind %s | FileCheck %s
 // CHECK: ObjCPropertyDecl=x:2:25 typekind=ObjCId [canonical=ObjCObjectPointer]
 // CHECK: ObjCInstanceMethodDecl=mymethod:3:8 typekind=Invalid [result=Int]
-// CHECK: ObjCInstanceMethodDecl=mymethod2:blah:boo::4:8 typekind=Invalid [result=Int] [args= ObjCId ObjCClass ObjCSel]
+// CHECK: ObjCInstanceMethodDecl=mymethod2:blah:boo::4:13 typekind=Invalid [result=ObjCId] [args= ObjCId ObjCClass ObjCSel]
index fcc13f6..15f818a 100644 (file)
@@ -96,14 +96,15 @@ static CXTypeKind GetTypeKind(QualType T) {
 CXType cxtype::MakeCXType(QualType T, CXTranslationUnit TU) {
   CXTypeKind TK = CXType_Invalid;
 
-  if (TU) {
+  if (TU && !T.isNull()) {
     ASTContext &Ctx = static_cast<ASTUnit *>(TU->TUData)->getASTContext();
     if (Ctx.getLangOpts().ObjC1) {
-      if (Ctx.isObjCIdType(T))
+      QualType UnqualT = T.getUnqualifiedType();
+      if (Ctx.isObjCIdType(UnqualT))
         TK = CXType_ObjCId;
-      else if (Ctx.isObjCClassType(T))
+      else if (Ctx.isObjCClassType(UnqualT))
         TK = CXType_ObjCClass;
-      else if (Ctx.isObjCSelType(T))
+      else if (Ctx.isObjCSelType(UnqualT))
         TK = CXType_ObjCSel;
     }
   }