rjmccall added a comment.

I can't easily tell you because the "standalone example" involves a million 
templates that I don't know anything about, and nobody seems to have done the 
analysis to identify the specific source of the miscompile.

What I can tell you is that there is an enormous semantic difference between 
passing a pr-value argument to a parameter that's passed by reference and to a 
parameter that's passed by value.  In the former case, the reference is bound 
to a temporary with full-expression lifetime, and it is totally reasonable to 
return its address.  In the latter case, the parameter object will often have a 
lifetime bound by the current function, and you cannot return its address 
without it being UB.

Looking closer, my previous guess that this was accidentally triggering for 
reference parameters seems to be wrong, because that case is filtered out 
earlier in the function.  I'm not sure what the problem is exactly, then, 
unless the code indeed has UB.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D74094

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

Reply via email to