https://github.com/balazske updated https://github.com/llvm/llvm-project/pull/193492
From 97bbe02913f5103a567e9832d1b38c5a0f7ee875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]> Date: Wed, 22 Apr 2026 15:03:10 +0200 Subject: [PATCH 1/3] [clang][ASTImporter] Add import of node 'TemplateParamObjectDecl' --- clang/lib/AST/ASTImporter.cpp | 17 ++++++++++++ clang/unittests/AST/ASTImporterTest.cpp | 35 +++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 41ba98c53247d..94a7f742a53d7 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -566,6 +566,7 @@ namespace clang { ExpectedDecl VisitObjCImplementationDecl(ObjCImplementationDecl *D); ExpectedDecl VisitObjCPropertyDecl(ObjCPropertyDecl *D); ExpectedDecl VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D); + ExpectedDecl VisitTemplateParamObjectDecl(TemplateParamObjectDecl *D); ExpectedDecl VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D); ExpectedDecl VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D); ExpectedDecl VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D); @@ -6137,6 +6138,22 @@ ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) { return ToImpl; } +ExpectedDecl +ASTNodeImporter::VisitTemplateParamObjectDecl(TemplateParamObjectDecl *D) { + Error Err = Error::success(); + auto ToType = importChecked(Err, D->getType()); + auto ToValue = importChecked(Err, D->getValue()); + if (Err) + return std::move(Err); + + TemplateParamObjectDecl *ToD; + auto Create = [this](QualType T, const APValue &V) { + return Importer.ToContext.getTemplateParamObjectDecl(T, V); + }; + (void)GetImportedOrCreateSpecialDecl(ToD, Create, D, ToType, ToValue); + return ToD; +} + ExpectedDecl ASTNodeImporter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) { // For template arguments, we adopt the translation unit as our declaration diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index d1d6ea94d3154..f59edb26d73fb 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -4099,6 +4099,41 @@ TEST_P(ASTImporterOptionSpecificTestBase, unless(classTemplatePartialSpecializationDecl())))); } +TEST_P(ASTImporterOptionSpecificTestBase, ImportTemplateParamObjectDecl) { + const char *Code = R"( + struct A { int x, y; }; + template<A> struct S1 {}; + template<A, int> struct S2 {}; + S1<A{1, 2}> s1; + S2<A{1, 2}, 3> s2; + )"; + Decl *TU = getTuDecl(Code, Lang_CXX20, "input.cc"); + + auto *FromFirstSpec = + FirstDeclMatcher<ClassTemplateSpecializationDecl>().match( + TU, classTemplateSpecializationDecl()); + auto *FromLastSpec = + FirstDeclMatcher<ClassTemplateSpecializationDecl>().match( + TU, classTemplateSpecializationDecl()); + auto *FromFirstParamObject = dyn_cast<TemplateParamObjectDecl>( + FromFirstSpec->getTemplateArgs().get(0).getAsDecl()); + auto *FromLastParamObject = dyn_cast<TemplateParamObjectDecl>( + FromLastSpec->getTemplateArgs().get(0).getAsDecl()); + ASSERT_TRUE(FromFirstParamObject); + ASSERT_EQ(FromFirstParamObject, FromLastParamObject); + + auto *ToFirstSpec = Import(FromFirstSpec, Lang_CXX20); + EXPECT_TRUE(ToFirstSpec); + auto *ToLastSpec = Import(FromLastSpec, Lang_CXX20); + EXPECT_TRUE(ToLastSpec); + auto *ToFirstParamObject = dyn_cast<TemplateParamObjectDecl>( + ToFirstSpec->getTemplateArgs().get(0).getAsDecl()); + auto *ToLastParamObject = dyn_cast<TemplateParamObjectDecl>( + ToLastSpec->getTemplateArgs().get(0).getAsDecl()); + EXPECT_NE(FromFirstParamObject, ToFirstParamObject); + EXPECT_EQ(ToFirstParamObject, ToLastParamObject); +} + TEST_P(ASTImporterOptionSpecificTestBase, InitListExprValueKindShouldBeImported) { Decl *TU = getTuDecl( From 8a36334df684a223fc91bbc2be806d1d3e84ccd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]> Date: Thu, 7 May 2026 16:55:41 +0200 Subject: [PATCH 2/3] fixed test --- clang/unittests/AST/ASTImporterTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index f59edb26d73fb..ba9892d498af4 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -4113,7 +4113,7 @@ TEST_P(ASTImporterOptionSpecificTestBase, ImportTemplateParamObjectDecl) { FirstDeclMatcher<ClassTemplateSpecializationDecl>().match( TU, classTemplateSpecializationDecl()); auto *FromLastSpec = - FirstDeclMatcher<ClassTemplateSpecializationDecl>().match( + LastDeclMatcher<ClassTemplateSpecializationDecl>().match( TU, classTemplateSpecializationDecl()); auto *FromFirstParamObject = dyn_cast<TemplateParamObjectDecl>( FromFirstSpec->getTemplateArgs().get(0).getAsDecl()); From 70c3ab518945cb1e35d3640d2a8750eccbaf3612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <[email protected]> Date: Thu, 7 May 2026 18:23:13 +0200 Subject: [PATCH 3/3] fixed formatting error --- clang/unittests/AST/ASTImporterTest.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index ba9892d498af4..3ef11a25a4d1d 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -4112,9 +4112,8 @@ TEST_P(ASTImporterOptionSpecificTestBase, ImportTemplateParamObjectDecl) { auto *FromFirstSpec = FirstDeclMatcher<ClassTemplateSpecializationDecl>().match( TU, classTemplateSpecializationDecl()); - auto *FromLastSpec = - LastDeclMatcher<ClassTemplateSpecializationDecl>().match( - TU, classTemplateSpecializationDecl()); + auto *FromLastSpec = LastDeclMatcher<ClassTemplateSpecializationDecl>().match( + TU, classTemplateSpecializationDecl()); auto *FromFirstParamObject = dyn_cast<TemplateParamObjectDecl>( FromFirstSpec->getTemplateArgs().get(0).getAsDecl()); auto *FromLastParamObject = dyn_cast<TemplateParamObjectDecl>( _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
