]> granicus.if.org Git - clang/commitdiff
[libclang] Handle AutoType in clang_getTypeDeclaration
authorSergey Kalinichev <kalinichev.so.0@gmail.com>
Thu, 7 Jan 2016 09:20:40 +0000 (09:20 +0000)
committerSergey Kalinichev <kalinichev.so.0@gmail.com>
Thu, 7 Jan 2016 09:20:40 +0000 (09:20 +0000)
Differential Revision: http://reviews.llvm.org/D13001

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257043 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/print-type-declaration.cpp [new file with mode: 0644]
tools/c-index-test/c-index-test.c
tools/libclang/CXType.cpp

diff --git a/test/Index/print-type-declaration.cpp b/test/Index/print-type-declaration.cpp
new file mode 100644 (file)
index 0000000..31c0a73
--- /dev/null
@@ -0,0 +1,12 @@
+
+class Test{};
+
+int main()
+{
+  auto a = Test();
+  auto b = a;
+}
+
+// RUN: c-index-test -test-print-type-declaration -std=c++11 %s | FileCheck %s
+// CHECK: VarDecl=a:6:8 (Definition) [typedeclaration=Test] [typekind=Record]
+// CHECK: VarDecl=b:7:8 (Definition) [typedeclaration=Test] [typekind=Record]
index 8336491c0158d56d30c6ba8f58210c1169e6c8ae..2a6002537ec56b548793f14d967469690a481ba0 100644 (file)
@@ -1507,6 +1507,22 @@ static enum CXChildVisitResult PrintBitWidth(CXCursor cursor, CXCursor p,
   return CXChildVisit_Recurse;
 }
 
+/******************************************************************************/
+/* Type declaration testing                                                   */
+/******************************************************************************/
+
+static enum CXChildVisitResult PrintTypeDeclaration(CXCursor cursor, CXCursor p,
+                                             CXClientData d) {
+  CXCursor typeDeclaration = clang_getTypeDeclaration(clang_getCursorType(cursor));
+
+  if (clang_isDeclaration(typeDeclaration.kind)) {
+    PrintCursor(cursor, NULL);
+    PrintTypeAndTypeKind(clang_getCursorType(typeDeclaration), " [typedeclaration=%s] [typekind=%s]\n");
+  }
+
+  return CXChildVisit_Recurse;
+}
+
 /******************************************************************************/
 /* Loading ASTs/source.                                                       */
 /******************************************************************************/
@@ -4137,6 +4153,7 @@ static void print_usage(void) {
     "       c-index-test -test-print-type {<args>}*\n"
     "       c-index-test -test-print-type-size {<args>}*\n"
     "       c-index-test -test-print-bitwidth {<args>}*\n"
+    "       c-index-test -test-print-type-declaration {<args>}*\n"
     "       c-index-test -print-usr [<CursorKind> {<args>}]*\n"
     "       c-index-test -print-usr-file <file>\n"
     "       c-index-test -write-pch <file> <compiler arguments>\n");
@@ -4230,6 +4247,9 @@ int cindextest_main(int argc, const char **argv) {
   else if (argc > 2 && strcmp(argv[1], "-test-print-type-size") == 0)
     return perform_test_load_source(argc - 2, argv + 2, "all",
                                     PrintTypeSize, 0);
+  else if (argc > 2 && strcmp(argv[1], "-test-print-type-declaration") == 0)
+    return perform_test_load_source(argc - 2, argv + 2, "all",
+                                    PrintTypeDeclaration, 0);
   else if (argc > 2 && strcmp(argv[1], "-test-print-bitwidth") == 0)
     return perform_test_load_source(argc - 2, argv + 2, "all",
                                     PrintBitWidth, 0);
index 72c12cd16b97851dc2884e493992cc2a2ec2a77d..44bb631f78666abdd8d831e255a9f66ab8c0e30a 100644 (file)
@@ -412,6 +412,12 @@ try_again:
                                                          .getAsTemplateDecl();
     break;
 
+  case Type::Auto:
+    TP = cast<AutoType>(TP)->getDeducedType().getTypePtrOrNull();
+    if (TP)
+      goto try_again;
+    break;
+
   case Type::InjectedClassName:
     D = cast<InjectedClassNameType>(TP)->getDecl();
     break;