================
@@ -4481,11 +4481,39 @@ ExprResult Sema::SubstConceptTemplateArguments(
 
     ExprResult TransformUnresolvedLookupExpr(UnresolvedLookupExpr *E,
                                              bool IsAddressOfOperand = false) {
-      if (E->isConceptReference()) {
-        ExprResult Res = SemaRef.SubstExpr(E, MLTAL);
-        return Res;
-      }
-      return E;
+      if (!E->isConceptReference())
+        return E;
+
+      NamedDecl *D = *E->decls_begin();
+      ConceptDecl *ResolvedConcept = nullptr;
+
+      if (const auto * const TTP = dyn_cast<TemplateTemplateParmDecl>(D)) {
+        const auto Depth = TTP->getDepth();
+        const auto Pos = TTP->getPosition();
+        if (Depth < MLTAL.getNumLevels() &&
+            MLTAL.hasTemplateArgument(Depth, Pos)) {
+          TemplateArgument Arg = MLTAL(Depth, Pos);
+          if (Arg.getKind() == TemplateArgument::Template)
+            ResolvedConcept = dyn_cast_or_null<ConceptDecl>(
+                Arg.getAsTemplate().getAsTemplateDecl());
+        }
+      } else
+        ResolvedConcept = dyn_cast<ConceptDecl>(D);
+
+      if (ResolvedConcept == nullptr)
----------------
wx257osn2 wrote:

When we replace `if (ResolvedConcept == nullptr) return E;` with 
`assert(ResolvedConcept != nullptr);` , the new test I added named 
`multi_level_concept_template_parameter` will be failed

https://github.com/llvm/llvm-project/pull/184406
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to