calling conventions

A calling convention is as close as ABI Cafe ever gets to referring to "An ABI" directly, but they're still pretty abstract, since a single calling convention can mean different things on different platforms.

By default, for each test we will generate a copy of it for every known calling convention (changing the convention of all functions declared by that test).

Each Toolchain may claim to support a particular set of calling conventions (and may use knowledge of the target platform to adjust their decisions). Refusing to support a convention will result in those tests getting marked as "skipped" and omitted from the final report.

If two Toolchains claim to support a calling convention on a platform, it is assumed that they want to have compatible ABIs, and it's our goal to identify what does and doesn't work.

--conventions

All of the following conventions are enabled by default, and only these conventions are supported.

Universal Conventions:

  • c: the platform's default C convention (extern "C")
  • rust: the platform's default Rust convention (extern "Rust")

Windows Conventions:

  • cdecl
  • fastcall
  • stdcall
  • vectorcall

(There exists some code for other weird conventions rustc supports, but they aren't really wired up properly and it's not clear if they serve any purpose.)