rjmccall added inline comments.
================ Comment at: lib/CodeGen/CGCall.cpp:1605 + ? CGM.getDataLayout().getAllocaAddrSpace() + : getContext().getTargetAddressSpace(LangAS::Default)); break; ---------------- yaxunl wrote: > rjmccall wrote: > > Everything about your reasoning seems to apply to normal indirect > > arguments, too. > non-byval indirect argument is normally in default address space instead of > alloca address space. For example, > > > ``` > struct A { int a;}; > void f(A &x); > ``` > `x` is an indirect argument but should not be in alloca addr space, since the > caller may pass a reference to a global variable. 'x' is not an indirect argument in this context. It is a direct argument that happens to be of reference type. A normal Indirect argument is when the ABI says an argument should implicitly be passed as a pointer to a temporary. IndirectByVal is when the ABI says that something should be passed directly in the arguments area of the stack. Some targets never use indirect arguments for normal C cases, but they're still used for direct non-POD arguments in C++. https://reviews.llvm.org/D34367 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits