rjmccall added a comment.

In http://reviews.llvm.org/D12614#274349, @sfantao wrote:

> Hi John,
>
> Thanks for the remark!
>
> In http://reviews.llvm.org/D12614#272354, @rjmccall wrote:
>
> > CurFuncDecl is supposed to be the enclosing user function.  Things like 
> > outlined functions should be getting stored in CurCodeDecl; that's how it's 
> > done for blocks and lambdas.
>
>
> Apologies I was not accurate in my previous post. `CurFuncDecl` is in fact 
> the declaration of the enclosing user function. What is not defined in some 
> times undefined is `CurGD` and this is what I was trying to use to get the 
> right mangled name of the user function, given that it also encodes the 
> structor type. So my question is: is there a good/safe way to get the mangled 
>  name of the user function given the function declaration? I didn't find any 
> good way to do that without replicating part of the stuff that happens in the 
> mangler.


You don't actually want the structor type of the parent, because the nested 
declaration is logically the same declaration across all of them.  For example, 
a lambda used in a constructor is still just a single type; there aren't 
implicitly 1-3 different types just because there are 1-3 different variant 
entrypoints for the constructor.

The way this generally works is that you just pick a single canonical variant.  
For example, the Itanium ABI says that you mangle local entities within 
constructors as if they were defined within the complete-object variant.  If 
you want to add a method to one of the CXXABI objects to pick a canonical GD 
for a declaration, feel free.


http://reviews.llvm.org/D12614



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

Reply via email to