[PATCH] D49235: [ASTImporter] Import described template (if any) of function.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 16 01:59:30 PDT 2018
balazske updated this revision to Diff 155630.
balazske added a comment.
- Removed setDescribedFunctionTemplate call.
Repository:
rC Clang
https://reviews.llvm.org/D49235
Files:
lib/AST/ASTImporter.cpp
unittests/AST/ASTImporterTest.cpp
Index: unittests/AST/ASTImporterTest.cpp
===================================================================
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -1125,7 +1125,7 @@
}
TEST_P(ASTImporterTestBase,
- DISABLED_ImportOfTemplatedDeclShouldImportTheFunctionTemplateDecl) {
+ ImportOfTemplatedDeclShouldImportTheFunctionTemplateDecl) {
Decl *FromTU = getTuDecl("template<class X> void f(){}", Lang_CXX);
auto FromFT = FirstDeclMatcher<FunctionTemplateDecl>().match(
FromTU, functionTemplateDecl());
Index: lib/AST/ASTImporter.cpp
===================================================================
--- lib/AST/ASTImporter.cpp
+++ lib/AST/ASTImporter.cpp
@@ -2499,6 +2499,7 @@
return ToD;
const FunctionDecl *FoundByLookup = nullptr;
+ FunctionTemplateDecl *FromFT = D->getDescribedFunctionTemplate();
// If this is a function template specialization, then try to find the same
// existing specialization in the "to" context. The localUncachedLookup
@@ -2525,6 +2526,14 @@
if (!FoundDecl->isInIdentifierNamespace(IDNS))
continue;
+ // If template was found, look at the templated function.
+ if (FromFT) {
+ if (auto *Template = dyn_cast<FunctionTemplateDecl>(FoundDecl))
+ FoundDecl = Template->getTemplatedDecl();
+ else
+ continue;
+ }
+
if (auto *FoundFunction = dyn_cast<FunctionDecl>(FoundDecl)) {
if (FoundFunction->hasExternalFormalLinkage() &&
D->hasExternalFormalLinkage()) {
@@ -2700,6 +2709,11 @@
ToFunction->setType(T);
}
+ // Import the describing template function, if any.
+ if (FromFT)
+ if (!Importer.Import(FromFT))
+ return nullptr;
+
if (D->doesThisDeclarationHaveABody()) {
if (Stmt *FromBody = D->getBody()) {
if (Stmt *ToBody = Importer.Import(FromBody)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49235.155630.patch
Type: text/x-patch
Size: 1891 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180716/434d411d/attachment.bin>
More information about the cfe-commits
mailing list