[clang] [clang-tools-extra] [Clang] Reland support friend declarations with a dependent nested-name-specifier (PR #208345)

Matheus Izvekov via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 15 09:54:38 PDT 2026


================
@@ -4906,12 +4906,22 @@ TemplateName TreeTransform<Derived>::TransformTemplateName(
       return TemplateName();
     assert(!UnderlyingQualifier && "unexpected qualifier");
 
-    if (!getDerived().AlwaysRebuild() &&
-        QualifierLoc.getNestedNameSpecifier() == QTN->getQualifier() &&
+    NestedNameSpecifier QNNS = QualifierLoc.getNestedNameSpecifier();
+    if (!getDerived().AlwaysRebuild() && QNNS == QTN->getQualifier() &&
         NewUnderlyingName == UnderlyingName)
       return Name;
     CXXScopeSpec SS;
     SS.Adopt(QualifierLoc);
+    TemplateDecl *TD = NewUnderlyingName.getAsTemplateDecl();
+    if (TD && TD->getIdentifier() && QNNS != QTN->getQualifier()) {
+      CXXRecordDecl *RD = QNNS.getAsRecordDecl();
+      bool IsInjectedClassName = RD && isa<ClassTemplateDecl>(TD) &&
+                                 RD->getIdentifier() == TD->getIdentifier();
+      if (!IsInjectedClassName)
+        return getDerived().RebuildTemplateName(
+            SS, TemplateKWLoc, *TD->getIdentifier(), NameLoc, ObjectType,
+            AllowInjectedClassName);
+    }
----------------
mizvekov wrote:

Can you please point to the commit which fixed this?

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


More information about the cfe-commits mailing list