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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits