hliao added a comment.

In D63164#1542361 <https://reviews.llvm.org/D63164#1542361>, @rsmith wrote:

> I think this is the wrong way to handle this issue. We need to give lambdas a 
> mangling if they occur in functions for which there can be definitions in 
> multiple translation units. In regular C++ code, that's inline functions and 
> function template specializations, so that's what we're currently checking 
> for. CUDA adds more cases (in particular, `__host__ __device__` functions, 
> plus anything else that can be emitted for multiple targets), so we should 
> additionally check for those cases when determining whether to number 
> lambdas. I don't see any need for a flag to control this behavior.


I agree that this's a temporary solution to fix the issue. But, the real tricky 
part is that, once we found a `__device__` lambda, we need to ensure all the 
enclosing scopes should be named following ODR as well just as the case 
illustrated in the test case. In fact, it's not the outer lambda (not annotated 
with `__device__` nor within an inline function.) not being named in ODR. The 
tricky issue is that, so far, we don't maintain a context to add mangling back 
if we found an inner one needs to follow ODR. We have to add that before we 
could do that on-demand. I was working on that but it would take more efforts 
of review.
That's also the motivation why this change adds a option to guard this behavior.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D63164



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

Reply via email to