aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2023-12-11 14:05:48 -0500
committerJason Merrill <jason@redhat.com>2023-12-11 14:10:55 -0500
commit074c6f15f7a28c620c756f18c2a310961de00539 (patch)
tree62e607daf254ce4935e60c2c3b928a326c733646 /gcc
parenta8a3d832e609501002dee54150abfd96a28fe532 (diff)
downloadgcc-074c6f15f7a28c620c756f18c2a310961de00539.zip
gcc-074c6f15f7a28c620c756f18c2a310961de00539.tar.gz
gcc-074c6f15f7a28c620c756f18c2a310961de00539.tar.bz2
testsuite: update mangling
Since r14-6064-gc3f281a0c1ca50 this test was checking for the wrong mangling, but it still passed on targets that support ABI compatibility aliases. Let's avoid generating those aliases when checking mangling. gcc/ChangeLog: * common.opt: Add comment. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-explicit-inst1.C: Specify ABI v18. * g++.dg/cpp2a/concepts-explicit-inst1a.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/common.opt1
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1a.C24
3 files changed, 26 insertions, 0 deletions
diff --git a/gcc/common.opt b/gcc/common.opt
index 5eb5ecf..d263a95 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1020,6 +1020,7 @@ Driver Undocumented
;
; 19: Emits ABI tags if needed in structured binding mangled names.
; Ignores cv-quals on [[no_unique_object]] members.
+; Mangles constraints on function templates.
; Default in G++ 14.
;
; Additional positive integers will be assigned as new versions of
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C b/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C
index 5cbf64a..b66e919 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C
@@ -1,4 +1,5 @@
// { dg-do compile { target c++20 } }
+// { dg-additional-options "-fabi-version=18 -fabi-compat-version=18" }
// { dg-final { scan-assembler "_Z1gI1XEvT_" } }
// { dg-final { scan-assembler "_Z1gI1YEvT_" } }
// { dg-final { scan-assembler "_Z1gIiEvT_" } }
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1a.C b/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1a.C
new file mode 100644
index 0000000..feb31f9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1a.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++20 } }
+// { dg-additional-options "-fabi-version=0 -fabi-compat-version=0" }
+// { dg-final { scan-assembler "_Z1gITk1C1YEvT_" } }
+// { dg-final { scan-assembler "_Z1gITk1D1XEvT_" } }
+// { dg-final { scan-assembler "_Z1gIiEvT_" } }
+
+template<typename T>
+ concept C = __is_class(T);
+
+template<typename T>
+ concept D = C<T> && __is_empty(T);
+
+struct X { };
+struct Y { int n; };
+
+template<typename T> void g(T) { } // #1
+template<C T> void g(T) { } // #2
+template<D T> void g(T) { } // #3
+
+template void g(int); // Instantiate #1
+template void g(X); // Instantitae #3
+template void g(Y); // Instantiate #2
+
+int main() { }