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
