[llvm-dev] Making lambda function name consistent with GCC?

Xun Li via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 30 09:41:48 PDT 2021


Hi,

I noticed that when compiling lambda functions, the generated function
names use different conventions than GCC.
Example: https://godbolt.org/z/5qvqKqEe6
The lambda in Clang is named "_Z3barIZ3foovE3$_0EvT_", while the one
in GCC is named "_Z3barIZ3foovEUlvE_EvT_". Their demangled names are
also different ("void bar<foo()::$_0>(foo()::$_0)" vs "void
bar<foo()::{lambda()#1}>(foo()::{lambda()#1})").
Lambdas are not covered by the ABI so this is OK.
However there are use-cases where I find it very inconvenient when
they generate different names. For example, if we are to compare the
performance difference of the same software compiled under Clang and
GCC, the perf stack traces will look very different because of the
naming differences, making it hard to compare.
Is there any particular reason that Clang uses a different naming
convention for lambdas, and would there be push-backs if we were to
make it consistent with GCC?
Thanks.

-- 
Xun


More information about the llvm-dev mailing list