https://github.com/zyn0217 updated 
https://github.com/llvm/llvm-project/pull/183010

>From 734d3d40448d48668a48b75a2f944d611ebb3e43 Mon Sep 17 00:00:00 2001
From: Younan Zhang <[email protected]>
Date: Tue, 24 Feb 2026 16:12:51 +0800
Subject: [PATCH 1/2] [Clang] Check the underlying type dependency in concept
 checking guards

In the concept parameter mapping patch, we partially preserved sugar
for concept checking. However, in dependent contexts there may be
non-dependent aliases that still require concept checking to filter
out unwanted functions.

No release note because of the regression.
---
 clang/include/clang/Sema/Template.h  |  5 +++--
 clang/lib/Sema/SemaConcept.cpp       |  2 +-
 clang/test/SemaTemplate/concepts.cpp | 21 +++++++++++++++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/clang/include/clang/Sema/Template.h 
b/clang/include/clang/Sema/Template.h
index b0170c21feb1a..0be46e69f1b6f 100644
--- a/clang/include/clang/Sema/Template.h
+++ b/clang/include/clang/Sema/Template.h
@@ -185,12 +185,13 @@ enum class TemplateSubstitutionKind : char {
       return !(*this)(Depth, Index).isNull();
     }
 
-    bool isAnyArgInstantiationDependent() const {
+    bool isAnyArgInstantiationDependent(const ASTContext &C) const {
       for (ArgumentListLevel ListLevel : TemplateArgumentLists)
         for (const TemplateArgument &TA : ListLevel.Args)
           // There might be null template arguments representing unused 
template
           // parameter mappings in an MLTAL during concept checking.
-          if (!TA.isNull() && TA.isInstantiationDependent())
+          if (!TA.isNull() &&
+              C.getCanonicalTemplateArgument(TA).isInstantiationDependent())
             return true;
       return false;
     }
diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp
index f55f3a9a61ab8..38791940247cb 100644
--- a/clang/lib/Sema/SemaConcept.cpp
+++ b/clang/lib/Sema/SemaConcept.cpp
@@ -1154,7 +1154,7 @@ static bool CheckConstraintSatisfaction(
     return false;
   }
 
-  if (TemplateArgsLists.isAnyArgInstantiationDependent()) {
+  if (TemplateArgsLists.isAnyArgInstantiationDependent(S.Context)) {
     // No need to check satisfaction for dependent constraint expressions.
     Satisfaction.IsSatisfied = true;
     return false;
diff --git a/clang/test/SemaTemplate/concepts.cpp 
b/clang/test/SemaTemplate/concepts.cpp
index cbb7e6dfb96d7..0737cd3aabcff 100644
--- a/clang/test/SemaTemplate/concepts.cpp
+++ b/clang/test/SemaTemplate/concepts.cpp
@@ -1704,6 +1704,27 @@ struct ice_point : relative_point_origin<point<kelvin>> 
{};
 
 }
 
+namespace GH182344 {
+
+template <typename T>
+  requires true
+void f() {}
+
+template <typename T>
+  requires false
+void f() = delete;
+
+template <typename T>
+struct Bar {};
+
+template <typename T> using Foo = Bar<T>;
+
+template <typename T> void use() {
+  f<Foo<T>>();
+}
+
+}
+
 namespace GH174667 {
 
 template<class T, class, class U>

>From db26019c5dc3ecff766d9598d66b979bb5e77eab Mon Sep 17 00:00:00 2001
From: Younan Zhang <[email protected]>
Date: Tue, 24 Feb 2026 17:14:08 +0800
Subject: [PATCH 2/2] Fix bytecode tests

---
 .../AST/ByteCode/libcxx/end-primitive-array-root-lifetime.cpp   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/clang/test/AST/ByteCode/libcxx/end-primitive-array-root-lifetime.cpp 
b/clang/test/AST/ByteCode/libcxx/end-primitive-array-root-lifetime.cpp
index f5ba94d429960..8cf50abcddec1 100644
--- a/clang/test/AST/ByteCode/libcxx/end-primitive-array-root-lifetime.cpp
+++ b/clang/test/AST/ByteCode/libcxx/end-primitive-array-root-lifetime.cpp
@@ -15,7 +15,7 @@ concept range = requires { end; };
 template <class _Tp>
 concept input_range = input_iterator<_Tp>;
 template <class>
-concept forward_range = false;
+concept forward_range = true;
 template <range _Rp> struct owning_view {
   _Rp __r_;
 };

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

Reply via email to