[llvm-dev] Confusions around nocapture and sret

Johannes Doerfert via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 19 11:35:09 PST 2021


1) I don't think so. sret is an attribute for *arguments* that declares 
they were created from source language return values, it's not a return 
value attribute.

2) I believe sret shuould imply nocapture when the frontend generates 
it. So yes.

3) noalias has no direct implications towards nocapture.

~ Johannes


On 2/19/21 1:18 PM, Xun Li via llvm-dev wrote:
> In the language reference (https://llvm.org/docs/LangRef.html), in the
> definition of nocapture, it says "This is not a valid attribute for
> return values". However I have seen it often that nocapture comes
> together with sret attribute:
> https://github.com/llvm/llvm-project/search?q=noalias+nocapture+sret
>
> A few questions:
> 1. Is the LangRef out-of-date for sret+nocapture?
> 2. Is an sret argument to a function guaranteed to be nocapture? (i.e.
> a pointer cannot escape through a sret argument?)
> 3. What about sret+noalias? Is that guaranteed to be nocapture?


More information about the llvm-dev mailing list