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

Reply via email to