[clang] [Clang][ASTImporter] Implement AST import for CXXParenListInitExpr, SubstNonTypeTemplateParmPackExpr, PseudoObjectExpr (PR #160904)

Balázs Kéri via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 14 07:58:36 PDT 2025


================
@@ -9274,6 +9278,54 @@ ASTNodeImporter::VisitConceptSpecializationExpr(ConceptSpecializationExpr *E) {
       const_cast<ImplicitConceptSpecializationDecl *>(CSD), &Satisfaction);
 }
 
+ExpectedStmt ASTNodeImporter::VisitSubstNonTypeTemplateParmPackExpr(
+    SubstNonTypeTemplateParmPackExpr *E) {
+  Error Err = Error::success();
+  auto ToType = importChecked(Err, E->getType());
+  auto ToNameLoc = importChecked(Err, E->getParameterPackLocation());
+  auto ToArgPack = importChecked(Err, E->getArgumentPack());
+  auto ToAssociatedDecl = importChecked(Err, E->getAssociatedDecl());
+  if (Err)
+    return std::move(Err);
+
+  return new (Importer.getToContext()) SubstNonTypeTemplateParmPackExpr(
+      ToType, E->getValueKind(), ToNameLoc, ToArgPack, ToAssociatedDecl,
+      E->getIndex(), E->getFinal());
+}
+
+ExpectedStmt ASTNodeImporter::VisitPseudoObjectExpr(PseudoObjectExpr *E) {
+  SmallVector<Expr *, 4> ToSemantics(E->getNumSemanticExprs());
+  if (Error Err = ImportContainerChecked(E->semantics(), ToSemantics))
+    return std::move(Err);
+  Expr *ToSynt = nullptr;
+  if (const Expr *FromSynt = E->getSyntacticForm()) {
+    if (auto ToSyntOrErr = import(FromSynt))
+      ToSynt = *ToSyntOrErr;
+    else
+      return ToSyntOrErr.takeError();
+  }
+  return PseudoObjectExpr::Create(Importer.getToContext(), ToSynt, ToSemantics,
----------------
balazske wrote:

`import` can handle null pointers.
```suggestion
  auto ToSyntOrErr = import(FromSynt);
  if (!ToSyntOrErr)
    return ToSyntOrErr.takeError();
  return PseudoObjectExpr::Create(Importer.getToContext(), *ToSyntOrErr, ToSemantics,
```

https://github.com/llvm/llvm-project/pull/160904


More information about the cfe-commits mailing list