forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#97971 - Soveu:varargs, r=jackh726
Enable varargs support for calling conventions other than C or cdecl This patch makes it possible to use varargs for calling conventions, which are either based on C (efiapi) or C is based on them (sysv64 and win64). Also pinging ``@phlopsi,`` because he noticed first this oversight when writing a library for UEFI.
- Loading branch information
Showing
12 changed files
with
173 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
src/doc/unstable-book/src/language-features/extended-varargs-abi-support.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# `extended_varargs_abi_support` | ||
|
||
The tracking issue for this feature is: [#100189] | ||
|
||
[#100189]: https://github.com/rust-lang/rust/issues/100189 | ||
|
||
------------------------ | ||
|
||
This feature adds the possibility of using `sysv64`, `win64` or `efiapi` calling | ||
conventions on functions with varargs. |
19 changes: 19 additions & 0 deletions
19
src/test/ui/c-variadic/feature-gate-extended_varargs_abi_support.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#![feature(abi_efiapi)] | ||
|
||
fn efiapi(f: extern "efiapi" fn(usize, ...)) { | ||
//~^ ERROR: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
//~^^ ERROR: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
f(22, 44); | ||
} | ||
fn sysv(f: extern "sysv64" fn(usize, ...)) { | ||
//~^ ERROR: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
//~^^ ERROR: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
f(22, 44); | ||
} | ||
fn win(f: extern "win64" fn(usize, ...)) { | ||
//~^ ERROR: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
//~^^ ERROR: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
f(22, 44); | ||
} | ||
|
||
fn main() {} |
49 changes: 49 additions & 0 deletions
49
src/test/ui/c-variadic/feature-gate-extended_varargs_abi_support.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
error[E0658]: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:3:14 | ||
| | ||
LL | fn efiapi(f: extern "efiapi" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #100189 <https://github.com/rust-lang/rust/issues/100189> for more information | ||
= help: add `#![feature(extended_varargs_abi_support)]` to the crate attributes to enable | ||
|
||
error[E0045]: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:3:14 | ||
| | ||
LL | fn efiapi(f: extern "efiapi" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadic function must have a compatible calling convention | ||
|
||
error[E0658]: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:8:12 | ||
| | ||
LL | fn sysv(f: extern "sysv64" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #100189 <https://github.com/rust-lang/rust/issues/100189> for more information | ||
= help: add `#![feature(extended_varargs_abi_support)]` to the crate attributes to enable | ||
|
||
error[E0045]: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:8:12 | ||
| | ||
LL | fn sysv(f: extern "sysv64" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadic function must have a compatible calling convention | ||
|
||
error[E0658]: using calling conventions other than `C` or `cdecl` for varargs functions is unstable | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:13:11 | ||
| | ||
LL | fn win(f: extern "win64" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #100189 <https://github.com/rust-lang/rust/issues/100189> for more information | ||
= help: add `#![feature(extended_varargs_abi_support)]` to the crate attributes to enable | ||
|
||
error[E0045]: C-variadic function must have a compatible calling convention, like `C` or `cdecl` | ||
--> $DIR/feature-gate-extended_varargs_abi_support.rs:13:11 | ||
| | ||
LL | fn win(f: extern "win64" fn(usize, ...)) { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C-variadic function must have a compatible calling convention | ||
|
||
error: aborting due to 6 previous errors | ||
|
||
Some errors have detailed explanations: E0045, E0658. | ||
For more information about an error, try `rustc --explain E0045`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters