llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Younan Zhang (zyn0217)

<details>
<summary>Changes</summary>

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 being a regression.

Fixes https://github.com/llvm/llvm-project/issues/182344

---
Full diff: https://github.com/llvm/llvm-project/pull/183010.diff


3 Files Affected:

- (modified) clang/include/clang/Sema/Template.h (+3-2) 
- (modified) clang/lib/Sema/SemaConcept.cpp (+1-1) 
- (modified) clang/test/SemaTemplate/concepts.cpp (+21) 


``````````diff
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 2674f0a7b8749..8cdcdbbbec14f 100644
--- a/clang/lib/Sema/SemaConcept.cpp
+++ b/clang/lib/Sema/SemaConcept.cpp
@@ -1123,7 +1123,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 d93391baf9926..15d323b8f47e2 100644
--- a/clang/test/SemaTemplate/concepts.cpp
+++ b/clang/test/SemaTemplate/concepts.cpp
@@ -1713,3 +1713,24 @@ template<C<void, bool> T> int f();
 void main() { f<int>(); }
 
 }
+
+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>>();
+}
+
+}

``````````

</details>


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

Reply via email to