[PATCH] D95187: [DebugInfo][CodeView] Use <lambda_n> as the display name for lambdas.

Reid Kleckner via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 26 14:34:54 PST 2021


rnk added inline comments.


================
Comment at: clang/include/clang/AST/Mangle.h:92
 
+  virtual StringRef getLambdaString(const CXXRecordDecl *Lambda) = 0;
+
----------------
akhuang wrote:
> rnk wrote:
> > I think I would prefer to have this return a number. I think CGDebugInfo should be responsible for the formatting of the display names, not the mangler. Both the MS and Itanium manglers have private methods for numbering internal linkage lambdas, and I think it would be reasonable to hook those up to a public virtual method.
> I used a string because we mangle some lambdas like <lambda_1_1> (when they're used as function parameters). 
> Maybe we don't need to differentiate between these lambdas though? 
I see. So, the situation we are worried about would look like:

```
struct Foo {
  static volatile int arg1_defaults, arg2_defaults;
  static void foo(
      int arg1 = []() { return ++arg1_defaults; }(),
      int arg2 = []() { return ++arg2_defaults; }());
};
void bar() { Foo::foo(); }
```

In this case, if we use numbers here, we'd end up using the names `Foo::<lambda_1>` `Foo::<lambda_1>`, and those would end up being duplicate LF_FUNC_IDs. Darn.

You were right, we better go back to using strings. Sorry about that. That makes a good test, though. :)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95187/new/

https://reviews.llvm.org/D95187



More information about the cfe-commits mailing list