akhuang added inline comments.

================
Comment at: clang/include/clang/AST/Mangle.h:92
 
+  virtual StringRef getLambdaString(const CXXRecordDecl *Lambda) = 0;
+
----------------
rnk wrote:
> 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. :)
Yep. I don't know what it should output for the Itanium version though. I guess 
it could just do the same thing, even though we don't use that string anywhere 
there.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D95187

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to