[v3,4/6] c++: Update mangling of lambdas in expressions
Commit Message
https://github.com/itanium-cxx-abi/cxx-abi/pull/85 clarifies that
mangling a lambda expression should use 'L' rather than "tl". This only
affects C++20 (and later) so no ABI flag is given.
gcc/cp/ChangeLog:
* mangle.cc (write_expression): Update mangling for lambdas.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/lambda-generic-mangle1.C: Update mangling.
* g++.dg/cpp2a/lambda-generic-mangle1a.C: Likewise.
Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
---
gcc/cp/mangle.cc | 2 +-
gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
Comments
On 1/6/25 7:23 AM, Nathaniel Shead wrote:
> https://github.com/itanium-cxx-abi/cxx-abi/pull/85 clarifies that
> mangling a lambda expression should use 'L' rather than "tl". This only
> affects C++20 (and later) so no ABI flag is given.
OK.
> gcc/cp/ChangeLog:
>
> * mangle.cc (write_expression): Update mangling for lambdas.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/cpp2a/lambda-generic-mangle1.C: Update mangling.
> * g++.dg/cpp2a/lambda-generic-mangle1a.C: Likewise.
>
> Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
> ---
> gcc/cp/mangle.cc | 2 +-
> gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C | 2 +-
> gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C | 2 +-
> 3 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
> index 9d457e2a2f3..e2e8fb2c71b 100644
> --- a/gcc/cp/mangle.cc
> +++ b/gcc/cp/mangle.cc
> @@ -3769,7 +3769,7 @@ write_expression (tree expr)
> equivalent.
>
> So just use the closure type mangling. */
> - write_string ("tl");
> + write_char ('L');
> write_type (LAMBDA_EXPR_CLOSURE (expr));
> write_char ('E');
> }
> diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C b/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C
> index 0051307f53d..306959a4f9f 100644
> --- a/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C
> +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1.C
> @@ -6,4 +6,4 @@ struct C {
> void f(decltype([](T, auto) { return 0; })) {}
> };
> void g() { C().f<int>({}); }
> -// { dg-final { scan-assembler "_ZN1C1fIiEEvDTtlNS_UlT_TL0__E_EEE" } }
> +// { dg-final { scan-assembler "_ZN1C1fIiEEvDTLNS_UlT_TL0__E_EEE" } }
> diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C b/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C
> index dc7b0125631..b7bd4ecdd46 100644
> --- a/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C
> +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-generic-mangle1a.C
> @@ -7,4 +7,4 @@ struct C {
> void f(decltype([](T, auto) { return 0; })) {}
> };
> void g() { C().f<int>({}); }
> -// { dg-final { scan-assembler "_ZN1C1fIiEEvDTtlNS_UlT_T_E_EEE" } }
> +// { dg-final { scan-assembler "_ZN1C1fIiEEvDTLNS_UlT_T_E_EEE" } }
@@ -3769,7 +3769,7 @@ write_expression (tree expr)
equivalent.
So just use the closure type mangling. */
- write_string ("tl");
+ write_char ('L');
write_type (LAMBDA_EXPR_CLOSURE (expr));
write_char ('E');
}
@@ -6,4 +6,4 @@ struct C {
void f(decltype([](T, auto) { return 0; })) {}
};
void g() { C().f<int>({}); }
-// { dg-final { scan-assembler "_ZN1C1fIiEEvDTtlNS_UlT_TL0__E_EEE" } }
+// { dg-final { scan-assembler "_ZN1C1fIiEEvDTLNS_UlT_TL0__E_EEE" } }
@@ -7,4 +7,4 @@ struct C {
void f(decltype([](T, auto) { return 0; })) {}
};
void g() { C().f<int>({}); }
-// { dg-final { scan-assembler "_ZN1C1fIiEEvDTtlNS_UlT_T_E_EEE" } }
+// { dg-final { scan-assembler "_ZN1C1fIiEEvDTLNS_UlT_T_E_EEE" } }