Changeset View
Changeset View
Standalone View
Standalone View
cfe/trunk/unittests/AST/ASTImporterTest.cpp
Show First 20 Lines • Show All 5,308 Lines • ▼ Show 20 Lines | auto *FromTypedef = FirstDeclMatcher<TypedefDecl>().match( | ||||
FromTU, typedefDecl(hasName(TypeName))); | FromTU, typedefDecl(hasName(TypeName))); | ||||
QualType FromType = FromTypedef->getUnderlyingType(); | QualType FromType = FromTypedef->getUnderlyingType(); | ||||
QualType ImportedType = ImportType(FromType, FromTypedef, Lang_CXX); | QualType ImportedType = ImportType(FromType, FromTypedef, Lang_CXX); | ||||
EXPECT_EQ(ImportedType, ToType); | EXPECT_EQ(ImportedType, ToType); | ||||
} | } | ||||
} | } | ||||
TEST_P(ASTImporterOptionSpecificTestBase, ImportOfDefaultImplicitFunctions) { | |||||
// Test that import of implicit functions works and the functions | |||||
// are merged into one chain. | |||||
auto GetDeclToImport = [this](StringRef File) { | |||||
Decl *FromTU = getTuDecl( | |||||
R"( | |||||
struct X { }; | |||||
// Force generating some implicit operator definitions for X. | |||||
void f() { X x1, x2; x1 = x2; X *x3 = new X; delete x3; } | |||||
)", | |||||
Lang_CXX11, File); | |||||
auto *FromD = FirstDeclMatcher<CXXRecordDecl>().match( | |||||
FromTU, cxxRecordDecl(hasName("X"), unless(isImplicit()))); | |||||
// Destructor is picked as one example of implicit function. | |||||
return FromD->getDestructor(); | |||||
}; | |||||
auto *ToD1 = Import(GetDeclToImport("input1.cc"), Lang_CXX11); | |||||
ASSERT_TRUE(ToD1); | |||||
auto *ToD2 = Import(GetDeclToImport("input2.cc"), Lang_CXX11); | |||||
ASSERT_TRUE(ToD2); | |||||
EXPECT_EQ(ToD1->getCanonicalDecl(), ToD2->getCanonicalDecl()); | |||||
} | |||||
TEST_P(ASTImporterOptionSpecificTestBase, | |||||
ImportOfExplicitlyDefaultedOrDeleted) { | |||||
Decl *FromTU = getTuDecl( | |||||
R"( | |||||
struct X { X() = default; X(const X&) = delete; }; | |||||
)", | |||||
Lang_CXX11); | |||||
auto *FromX = FirstDeclMatcher<CXXRecordDecl>().match( | |||||
FromTU, cxxRecordDecl(hasName("X"))); | |||||
auto *ImportedX = Import(FromX, Lang_CXX11); | |||||
auto *Constr1 = FirstDeclMatcher<CXXConstructorDecl>().match( | |||||
ImportedX, cxxConstructorDecl(hasName("X"), unless(isImplicit()))); | |||||
auto *Constr2 = LastDeclMatcher<CXXConstructorDecl>().match( | |||||
ImportedX, cxxConstructorDecl(hasName("X"), unless(isImplicit()))); | |||||
ASSERT_TRUE(ImportedX); | |||||
EXPECT_TRUE(Constr1->isDefaulted()); | |||||
EXPECT_TRUE(Constr1->isExplicitlyDefaulted()); | |||||
EXPECT_TRUE(Constr2->isDeletedAsWritten()); | |||||
EXPECT_EQ(ImportedX->isAggregate(), FromX->isAggregate()); | |||||
} | |||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, SVEBuiltins, | INSTANTIATE_TEST_CASE_P(ParameterizedTests, SVEBuiltins, | ||||
::testing::Values(ArgVector{"-target", | ::testing::Values(ArgVector{"-target", | ||||
"aarch64-linux-gnu"}), ); | "aarch64-linux-gnu"}), ); | ||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, ASTImporterLookupTableTest, | INSTANTIATE_TEST_CASE_P(ParameterizedTests, ASTImporterLookupTableTest, | ||||
DefaultTestValuesForRunOptions, ); | DefaultTestValuesForRunOptions, ); | ||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportPath, | INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportPath, | ||||
Show All 40 Lines | INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportImplicitMethods, | ||||
DefaultTestValuesForRunOptions, ); | DefaultTestValuesForRunOptions, ); | ||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportVariables, | INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportVariables, | ||||
DefaultTestValuesForRunOptions, ); | DefaultTestValuesForRunOptions, ); | ||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, LLDBLookupTest, | INSTANTIATE_TEST_CASE_P(ParameterizedTests, LLDBLookupTest, | ||||
DefaultTestValuesForRunOptions, ); | DefaultTestValuesForRunOptions, ); | ||||
} // end namespace ast_matchers | } // end namespace ast_matchers | ||||
} // end namespace clang | } // end namespace clang |