rnk added inline comments.

================
Comment at: clang/lib/CodeGen/CGCall.cpp:5103
 
-        if (Addr.getAlignment() < Align &&
+        if (CallInfo.isDelegateCall()) {
+          NeedCopy = false;
----------------
akhuang wrote:
> I think the problem is that it tries to do a copy here because the alignment 
> of the forwarding function arg is larger than the alignment of the object 
> that's being passed. I'm not sure how alignments are computed or if there are 
> any other requirements for alignment. Is it ok to just ignore the new 
> alignment? Do we need to change the code that computes the argument alignment?
> 
> (crbug.com/1457256#comment2 has an example repro)
Yes, in general, structs with doubles and i64 members are passed misaligned on 
i686. This is true for all functions, not just lambdas. We should power down 
whatever alignment logic is causing the copy.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154007

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

Reply via email to