skalinichev updated the summary for this revision.
skalinichev updated this revision to Diff 42654.
skalinichev added a comment.
Added tests
http://reviews.llvm.org/D13001
Files:
test/Index/print-type-declaration.cpp
tools/c-index-test/c-index-test.c
tools/libclang/CXType.cpp
Index: tools/libclang/CXType.cpp
===
--- tools/libclang/CXType.cpp
+++ tools/libclang/CXType.cpp
@@ -412,6 +412,12 @@
.getAsTemplateDecl();
break;
+ case Type::Auto:
+TP = cast(TP)->getDeducedType().getTypePtrOrNull();
+if (TP)
+ goto try_again;
+break;
+
case Type::InjectedClassName:
D = cast(TP)->getDecl();
break;
Index: tools/c-index-test/c-index-test.c
===
--- tools/c-index-test/c-index-test.c
+++ tools/c-index-test/c-index-test.c
@@ -1506,6 +1506,22 @@
}
/**/
+/* 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.
*/
/**/
@@ -4114,6 +4130,7 @@
" c-index-test -test-print-type {}*\n"
" c-index-test -test-print-type-size {}*\n"
" c-index-test -test-print-bitwidth {}*\n"
+" c-index-test -test-print-type-declaration {}*\n"
" c-index-test -print-usr [ {}]*\n"
" c-index-test -print-usr-file \n"
" c-index-test -write-pch \n");
@@ -4207,6 +4224,9 @@
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: test/Index/print-type-declaration.cpp
===
--- /dev/null
+++ test/Index/print-type-declaration.cpp
@@ -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: tools/libclang/CXType.cpp
===
--- tools/libclang/CXType.cpp
+++ tools/libclang/CXType.cpp
@@ -412,6 +412,12 @@
.getAsTemplateDecl();
break;
+ case Type::Auto:
+TP = cast(TP)->getDeducedType().getTypePtrOrNull();
+if (TP)
+ goto try_again;
+break;
+
case Type::InjectedClassName:
D = cast(TP)->getDecl();
break;
Index: tools/c-index-test/c-index-test.c
===
--- tools/c-index-test/c-index-test.c
+++ tools/c-index-test/c-index-test.c
@@ -1506,6 +1506,22 @@
}
/**/
+/* 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.