diff options
author | Jason Merrill <jason@redhat.com> | 2023-10-06 11:41:20 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2023-10-10 17:23:15 -0400 |
commit | bd5719bd7f7cb23e5ed96a1f1a28efbb3dec4a31 (patch) | |
tree | ab28d134a71e3f30ef1138fb6da1573464bdcf82 /gcc/cp/mangle.cc | |
parent | 975da6fa9170c9cf1ec4a9a9d8177f8561d464d1 (diff) | |
download | gcc-bd5719bd7f7cb23e5ed96a1f1a28efbb3dec4a31.zip gcc-bd5719bd7f7cb23e5ed96a1f1a28efbb3dec4a31.tar.gz gcc-bd5719bd7f7cb23e5ed96a1f1a28efbb3dec4a31.tar.bz2 |
c++: mangle multiple levels of template parms [PR109422]
This becomes be more important with concepts, but can also be seen with
generic lambdas.
PR c++/109422
gcc/cp/ChangeLog:
* mangle.cc (write_template_param): Also mangle level.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/lambda-generic-mangle1.C: New test.
* g++.dg/cpp2a/lambda-generic-mangle1a.C: New test.
Diffstat (limited to 'gcc/cp/mangle.cc')
-rw-r--r-- | gcc/cp/mangle.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc index d88c779..d079f72 100644 --- a/gcc/cp/mangle.cc +++ b/gcc/cp/mangle.cc @@ -3921,6 +3921,7 @@ static void write_template_param (const tree parm) { int parm_index; + int level; MANGLE_TRACE_TREE ("template-parm", parm); @@ -3930,10 +3931,12 @@ write_template_param (const tree parm) case TEMPLATE_TEMPLATE_PARM: case BOUND_TEMPLATE_TEMPLATE_PARM: parm_index = TEMPLATE_TYPE_IDX (parm); + level = TEMPLATE_TYPE_LEVEL (parm); break; case TEMPLATE_PARM_INDEX: parm_index = TEMPLATE_PARM_IDX (parm); + level = TEMPLATE_PARM_LEVEL (parm); break; default: @@ -3941,6 +3944,16 @@ write_template_param (const tree parm) } write_char ('T'); + if (level > 1) + { + if (abi_warn_or_compat_version_crosses (19)) + G.need_abi_warning = 1; + if (abi_version_at_least (19)) + { + write_char ('L'); + write_compact_number (level - 1); + } + } /* NUMBER as it appears in the mangling is (-1)-indexed, with the earliest template param denoted by `_'. */ write_compact_number (parm_index); |