================
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -std=c++20 %s -triple %itanium_abi_triple -emit-llvm -o - | 
FileCheck %s
+
+template <template <class> class S>
+void create_unique()
+  requires (S{0}, true) {}
+
+template <class Fn> struct A {
+  constexpr A(Fn) {};
+};
+
+template void create_unique<A>();
+// CHECK: @_Z13create_uniqueI1AEvvQcmtlT_Li0EELb1E(
----------------
mizvekov wrote:

The incorrect canonicalization leads us to miss redeclarations:

https://godbolt.org/z/cqsnqjEhT

The previous patch, combined with this patch, fixes that test case entirely.

Also, the tying of the name of the template parameter with the mangling is 
problematic, as we can reasonably assume we can rename template parameters 
without causing an ABI break, but not here.

Moreover, when there are multiple declarations, with different names for the 
template parameter, which name shall we pick? What about when these names 
differ across TUs?

Lastly, keeping the previous behavior under a different ABI flag seems 
problematic, as we would be also tying these bugs to the flag.

https://github.com/llvm/llvm-project/pull/106335
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to