diff options
author | Kai Stierand <kai.stierand@swplusplus.de> | 2022-10-11 14:32:43 +0200 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2022-10-11 15:01:31 +0200 |
commit | 5d859a1cdee3c15dce692767ee3e9ad03a8c4c1b (patch) | |
tree | c4c82dcf1e13bae545ea316f87fb04e34b7de679 /clang/unittests/libclang/LibclangTest.cpp | |
parent | 243da90ea5357c1ca324f714ea4813dc9029af27 (diff) | |
download | llvm-5d859a1cdee3c15dce692767ee3e9ad03a8c4c1b.zip llvm-5d859a1cdee3c15dce692767ee3e9ad03a8c4c1b.tar.gz llvm-5d859a1cdee3c15dce692767ee3e9ad03a8c4c1b.tar.bz2 |
[libclang] CIndex: Visit UsingTypeLoc as TypeRef
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D135555
Diffstat (limited to 'clang/unittests/libclang/LibclangTest.cpp')
-rw-r--r-- | clang/unittests/libclang/LibclangTest.cpp | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/clang/unittests/libclang/LibclangTest.cpp b/clang/unittests/libclang/LibclangTest.cpp index d020fa9..a2a1764 100644 --- a/clang/unittests/libclang/LibclangTest.cpp +++ b/clang/unittests/libclang/LibclangTest.cpp @@ -863,27 +863,19 @@ TEST_F(LibclangParseTest, clang_getUnqualifiedTypeRemovesQualifiers) { clang_isRestrictQualifiedType(type); }; - auto from_CXString = [](CXString cx_string) -> std::string { - std::string string{clang_getCString(cx_string)}; - - clang_disposeString(cx_string); - - return string; - }; - ClangTU = clang_parseTranslationUnit(Index, Header.c_str(), nullptr, 0, nullptr, 0, TUFlags); - Traverse([&is_qualified, &from_CXString](CXCursor cursor, CXCursor) { + Traverse([&is_qualified](CXCursor cursor, CXCursor) { if (clang_getCursorKind(cursor) == CXCursor_FunctionDecl) { CXType arg_type = clang_getArgType(clang_getCursorType(cursor), 0); EXPECT_TRUE(is_qualified(arg_type)) - << "Input data '" << from_CXString(clang_getCursorSpelling(cursor)) + << "Input data '" << fromCXString(clang_getCursorSpelling(cursor)) << "' first argument does not have a qualified type."; CXType unqualified_arg_type = clang_getUnqualifiedType(arg_type); EXPECT_FALSE(is_qualified(unqualified_arg_type)) - << "The type '" << from_CXString(clang_getTypeSpelling(arg_type)) + << "The type '" << fromCXString(clang_getTypeSpelling(arg_type)) << "' was not unqualified after a call to clang_getUnqualifiedType."; } @@ -901,28 +893,20 @@ TEST_F(LibclangParseTest, clang_getNonReferenceTypeRemovesRefQualifiers) { (type.kind == CXType_RValueReference); }; - auto from_CXString = [](CXString cx_string) -> std::string { - std::string string{clang_getCString(cx_string)}; - - clang_disposeString(cx_string); - - return string; - }; - const char *Args[] = {"-xc++"}; ClangTU = clang_parseTranslationUnit(Index, Header.c_str(), Args, 1, nullptr, 0, TUFlags); - Traverse([&is_ref_qualified, &from_CXString](CXCursor cursor, CXCursor) { + Traverse([&is_ref_qualified](CXCursor cursor, CXCursor) { if (clang_getCursorKind(cursor) == CXCursor_FunctionDecl) { CXType arg_type = clang_getArgType(clang_getCursorType(cursor), 0); EXPECT_TRUE(is_ref_qualified(arg_type)) - << "Input data '" << from_CXString(clang_getCursorSpelling(cursor)) + << "Input data '" << fromCXString(clang_getCursorSpelling(cursor)) << "' first argument does not have a ref-qualified type."; CXType non_reference_arg_type = clang_getNonReferenceType(arg_type); EXPECT_FALSE(is_ref_qualified(non_reference_arg_type)) - << "The type '" << from_CXString(clang_getTypeSpelling(arg_type)) + << "The type '" << fromCXString(clang_getTypeSpelling(arg_type)) << "' ref-qualifier was not removed after a call to " "clang_getNonReferenceType."; } @@ -931,6 +915,37 @@ TEST_F(LibclangParseTest, clang_getNonReferenceTypeRemovesRefQualifiers) { }); } +TEST_F(LibclangParseTest, VisitUsingTypeLoc) { + const char testSource[] = R"cpp( +namespace ns1 { +class Class1 +{ + void fun(); +}; +} + +using ns1::Class1; + +void Class1::fun() {} +)cpp"; + std::string fileName = "main.cpp"; + WriteFile(fileName, testSource); + const char *Args[] = {"-xc++"}; + ClangTU = clang_parseTranslationUnit(Index, fileName.c_str(), Args, 1, + nullptr, 0, TUFlags); + + llvm::Optional<CXCursor> typeRefCsr; + Traverse([&](CXCursor cursor, CXCursor parent) -> CXChildVisitResult { + if (cursor.kind == CXCursor_TypeRef) { + typeRefCsr.emplace(cursor); + } + return CXChildVisit_Recurse; + }); + ASSERT_TRUE(typeRefCsr.has_value()); + EXPECT_EQ(fromCXString(clang_getCursorSpelling(*typeRefCsr)), + "class ns1::Class1"); +} + class LibclangRewriteTest : public LibclangParseTest { public: CXRewriter Rew = nullptr; |