c++: Templated lambda mangling
(Explicitly) Templated lambdas have a different signature to implicitly templated lambdas -- '[]<template T> (T) {}' is not the same as '[](auto) {}'. This should be reflected in the mangling. The ABI captures this as https://github.com/itanium-cxx-abi/cxx-abi/issues/31, and clang has implemented such additions. It's relatively straight forwards to write out the non-synthetic template parms, and note if we need to issue an ABI warning. gcc/cp/ * mangle.cc (write_closure_template_head): New. (write_closure_type_name): Call it. gcc/testsuite/ * g++.dg/abi/lambda-ctx1-18.C: Adjust. * g++.dg/abi/lambda-ctx1-18vs17.C: Adjust. * g++.dg/abi/lambda-tpl1-17.C: New. * g++.dg/abi/lambda-tpl1-18.C: New. * g++.dg/abi/lambda-tpl1-18vs17.C: New. * g++.dg/abi/lambda-tpl1.h: New.
Showing
- gcc/cp/mangle.cc 68 additions, 0 deletionsgcc/cp/mangle.cc
- gcc/testsuite/g++.dg/abi/lambda-ctx1-18.C 2 additions, 2 deletionsgcc/testsuite/g++.dg/abi/lambda-ctx1-18.C
- gcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C 2 additions, 2 deletionsgcc/testsuite/g++.dg/abi/lambda-ctx1-18vs17.C
- gcc/testsuite/g++.dg/abi/lambda-tpl1-17.C 20 additions, 0 deletionsgcc/testsuite/g++.dg/abi/lambda-tpl1-17.C
- gcc/testsuite/g++.dg/abi/lambda-tpl1-18.C 25 additions, 0 deletionsgcc/testsuite/g++.dg/abi/lambda-tpl1-18.C
- gcc/testsuite/g++.dg/abi/lambda-tpl1-18vs17.C 16 additions, 0 deletionsgcc/testsuite/g++.dg/abi/lambda-tpl1-18vs17.C
- gcc/testsuite/g++.dg/abi/lambda-tpl1.h 59 additions, 0 deletionsgcc/testsuite/g++.dg/abi/lambda-tpl1.h
Loading
Please register or sign in to comment