[llvm-dev] C returning struct by value

Ahmed Bougacha via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 29 09:32:12 PDT 2016


On Tue, Mar 29, 2016 at 9:17 AM, James Y Knight via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> On Mon, Mar 28, 2016 at 5:14 PM, Michael Nicolella via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>>
>> Thanks for the explanation. It's good to hear the situation isn't felt to
>> be ideal.
>>
>> The details here are going to be sensitive to the OS + target that I'm
>> compiling for, right? So the effort here will be to understand and get right
>> the calling convention details for each supported target, yes?
>
>
> Yes, it is target specific. You should check
> clang/lib/CodeGen/TargetInfo.cpp for details of how calls are lowered from C
> for various targets. For some targets (e.g. x86-64), it's decidedly
> non-trivial. You can also run clang -emit-llvm to see what actually gets
> emitted for particular functions. If you stay away from passing
> structs/unions by value, it becomes a *lot* simpler, though...
>
> Some people have tried to make libraries for doing the ABI lowering
> available in a way that's not tied to clang. Here's one:
> <https://github.com/scross99/llvm-abi> (I have no idea how well, or if, it
> works).
>
> I think I've also seen mention of someone constructing the proper classes to
> pass to clang to have it emit the C ABI calls from their non-C language,
> although I'm not sure where I saw that.

There was an interesting talk a couple years ago about how Swift embeds clang:
  http://llvm.org/devmtg/2014-10/Slides/Skip%20the%20FFI.pdf
Now that it's open-source the code might be of interest.

-Ahmed

> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>


More information about the llvm-dev mailing list