[PATCH] D65999: [ASTImporter] Import additional flags for functions.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 9 03:24:16 PDT 2019
balazske created this revision.
Herald added subscribers: cfe-commits, gamesh411, Szelethus, dkrupp.
Herald added a reviewer: martong.
Herald added a reviewer: a.sidorin.
Herald added a reviewer: shafik.
Herald added a project: clang.
At AST import of function delcarations import the flags for defaulted
and deleted.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D65999
Files:
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp
Index: clang/unittests/AST/ASTImporterTest.cpp
===================================================================
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -5236,6 +5236,53 @@
EXPECT_EQ(ImportedX->getCanonicalDecl(), ToX->getCanonicalDecl());
}
+TEST_P(ASTImporterOptionSpecificTestBase, ImportOfDefaultImplicitFunctions) {
+ // Test that import of implicit functions works and the functions
+ // are merged into one chain.
+ auto GetDeclToImport = [this](const char *File) {
+ Decl *FromTU = getTuDecl(
+ R"(
+ struct 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, ASTImporterLookupTableTest,
DefaultTestValuesForRunOptions, );
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -3288,6 +3288,9 @@
ToFunction->setVirtualAsWritten(D->isVirtualAsWritten());
ToFunction->setTrivial(D->isTrivial());
ToFunction->setPure(D->isPure());
+ ToFunction->setDefaulted(D->isDefaulted());
+ ToFunction->setExplicitlyDefaulted(D->isExplicitlyDefaulted());
+ ToFunction->setDeletedAsWritten(D->isDeletedAsWritten());
ToFunction->setRangeEnd(ToEndLoc);
// Set the parameters.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65999.214341.patch
Type: text/x-patch
Size: 2797 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190809/5af37076/attachment-0001.bin>
More information about the cfe-commits
mailing list