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