aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests/libclang/LibclangTest.cpp
diff options
context:
space:
mode:
authorKai Stierand <kai.stierand@swplusplus.de>2022-10-11 14:32:43 +0200
committerSam McCall <sam.mccall@gmail.com>2022-10-11 15:01:31 +0200
commit5d859a1cdee3c15dce692767ee3e9ad03a8c4c1b (patch)
treec4c82dcf1e13bae545ea316f87fb04e34b7de679 /clang/unittests/libclang/LibclangTest.cpp
parent243da90ea5357c1ca324f714ea4813dc9029af27 (diff)
downloadllvm-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.cpp59
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;