[Lldb-commits] [clang] [lldb] [WIP] [clang][DebugInfo] Use mangling number and scope to create unambiguous names for anonymous structures (PR #168533)

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 24 08:29:19 PST 2026


Michael137 wrote:

> > @dwblaikie @rnk It's been a minute but here's the "canonical lambda names in debug-info" that we talked about in #159592
> > The interesting bit is the 3rd commit.
> > Before:
> > ```
> >   // CHECK: !DISubprogram(name: "f1<(lambda at {{.*}}simple-template-names.cpp:[[# @LINE - 2]]:17)>",
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > After:
> > ```
> >   // CHECK: !DISubprogram(name: "f1<f()::(lambda1)>",
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > Still in draft mode until I verify that this does the right thing for namespace contexts too. Also getting some debug-info size numbers
> 
> That looks plausible - this WIP is only for lambdas, not for anonymous structs/classes/enums, etc? Might be worth looking at those too to see if the design is amenable to addressing those too.

This patch should also work for non-lambda anonymous entities. I'll need to add some tests for those

> Also, addressing the canonicalization problem is only part of the solution for being able to use this for Simplified Template Names - the other part would be needing to encode this data (like the mangling number) in the DWARF. I guess we could put this stable name (the unqualified version of it, at least) in the DW_AT_name of the lambda, it's /probably/ better than no name at all (though no name is more accurate).

Right good point. For now I wasn't focused on solving the simple-template-name reconstitution issue for now. But definitely good to follow-up on this after this lands. I'd have to think more about that but off the top your suggestion re. DW_AT_name sounds reasonable (though will need to be careful with debug-info size there).

> Did you check two lambdas with different signatures? https://godbolt.org/z/qsvbfTs1f - the lambdas in inline function `f1` get a mangling number unique to the signature (so two lambdas with different signatures both get the mangling number 1) whereas in f3 (an extern linkage function) get numbered 1 and 2 (just a different choice in mangling - since the lambdas in f3 don't have external linkage, they can have any name we choose and we choose non-signature-scoped-numbering (GCC uses the inline type example))

Yea i still need to elaborate on the test cases. The previous version of this patch wasn't using the lambda mangling number (which is different from non-lambda mangling number). Latest version of the patch aligns with GCC, though will add more tests before marking for review. Thanks for taking a preliminary look!

https://github.com/llvm/llvm-project/pull/168533


More information about the lldb-commits mailing list