yaxunl marked 3 inline comments as done.
yaxunl added inline comments.

================
Comment at: lib/CodeGen/CGCall.cpp:1605
+              ? CGM.getDataLayout().getAllocaAddrSpace()
+              : getContext().getTargetAddressSpace(LangAS::Default));
       break;
----------------
rjmccall wrote:
> 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++.
You are right. Fixed.


https://reviews.llvm.org/D34367



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

Reply via email to