From 27ffc3725a3e8bf5cac28094099250bc2d664ec7 Mon Sep 17 00:00:00 2001 From: Chris Midgley Date: Wed, 21 Jul 2021 13:22:57 +0100 Subject: [PATCH 1/3] Add long explanation for E0757 --- compiler/rustc_error_codes/src/error_codes.rs | 2 +- .../src/error_codes/E0757.md | 25 +++++++++++++++++++ src/test/ui/ffi_const2.stderr | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 compiler/rustc_error_codes/src/error_codes/E0757.md diff --git a/compiler/rustc_error_codes/src/error_codes.rs b/compiler/rustc_error_codes/src/error_codes.rs index df162f8dce0..2eced1fc0fc 100644 --- a/compiler/rustc_error_codes/src/error_codes.rs +++ b/compiler/rustc_error_codes/src/error_codes.rs @@ -449,6 +449,7 @@ E0753: include_str!("./error_codes/E0753.md"), E0754: include_str!("./error_codes/E0754.md"), E0755: include_str!("./error_codes/E0755.md"), E0756: include_str!("./error_codes/E0756.md"), +E0757: include_str!("./error_codes/E0757.md"), E0758: include_str!("./error_codes/E0758.md"), E0759: include_str!("./error_codes/E0759.md"), E0760: include_str!("./error_codes/E0760.md"), @@ -638,6 +639,5 @@ E0783: include_str!("./error_codes/E0783.md"), // E0723, unstable feature in `const` context E0726, // non-explicit (not `'_`) elided lifetime in unsupported position // E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`. - E0757, // `#[ffi_const]` functions cannot be `#[ffi_pure]` E0772, // `'static' obligation coming from `impl dyn Trait {}` or `impl Foo for dyn Bar {}`. } diff --git a/compiler/rustc_error_codes/src/error_codes/E0757.md b/compiler/rustc_error_codes/src/error_codes/E0757.md new file mode 100644 index 00000000000..03ab4e7699d --- /dev/null +++ b/compiler/rustc_error_codes/src/error_codes/E0757.md @@ -0,0 +1,25 @@ +A function was given both the `ffi_const` and `ffi_pure` attributes. + +Erroneous code example: + +```compile_fail,E0757 +#![feature(ffi_const, ffi_pure)] + +extern "C" { + #[ffi_const] + #[ffi_pure] // error: `#[ffi_const]` function cannot be `#[ffi_pure]` + pub fn square(num: i32) -> i32; +} +``` + +As `const` has a stricter set of requirements than `pure`, remove the `ffi_pure` +attribute: + +``` +#![feature(ffi_const)] + +extern "C" { + #[ffi_const] + pub fn square(num: i32) -> i32; +} +``` diff --git a/src/test/ui/ffi_const2.stderr b/src/test/ui/ffi_const2.stderr index 0b401942c47..0c30c9dc50c 100644 --- a/src/test/ui/ffi_const2.stderr +++ b/src/test/ui/ffi_const2.stderr @@ -6,3 +6,4 @@ LL | #[ffi_pure] error: aborting due to previous error +For more information about this error, try `rustc --explain E0757`. From 3e981e220940c86b57ebab8413d9855af3bbda8c Mon Sep 17 00:00:00 2001 From: Chris Midgley Date: Wed, 21 Jul 2021 14:11:14 +0100 Subject: [PATCH 2/3] docs: add additional links for ffi_pure / ffi_const --- compiler/rustc_error_codes/src/error_codes/E0757.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_error_codes/src/error_codes/E0757.md b/compiler/rustc_error_codes/src/error_codes/E0757.md index 03ab4e7699d..ed7ee1c6fa2 100644 --- a/compiler/rustc_error_codes/src/error_codes/E0757.md +++ b/compiler/rustc_error_codes/src/error_codes/E0757.md @@ -12,8 +12,8 @@ extern "C" { } ``` -As `const` has a stricter set of requirements than `pure`, remove the `ffi_pure` -attribute: +As `ffi_const` has a stricter set of requirements than `ffi_pure`, remove the +`ffi_pure` attribute: ``` #![feature(ffi_const)] @@ -23,3 +23,11 @@ extern "C" { pub fn square(num: i32) -> i32; } ``` + +You can get more information about `const` and `pure` in the [GCC documentation +on Common Function Attributes]. The unstable Rust Book has more information +about [`ffi_const`] and [`ffi_pure`]. + +[GCC documentation on Common Function Attributes]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html +[`ffi_const`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/ffi-const.html +[`ffi_pure`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/ffi-pure.html From 8b75feceddbf4e162524418b72e1f5331de7109b Mon Sep 17 00:00:00 2001 From: Chris Midgley Date: Wed, 21 Jul 2021 14:13:46 +0100 Subject: [PATCH 3/3] docs: normalise wording in line with docs --- compiler/rustc_error_codes/src/error_codes/E0757.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_error_codes/src/error_codes/E0757.md b/compiler/rustc_error_codes/src/error_codes/E0757.md index ed7ee1c6fa2..41b06b23c4f 100644 --- a/compiler/rustc_error_codes/src/error_codes/E0757.md +++ b/compiler/rustc_error_codes/src/error_codes/E0757.md @@ -12,7 +12,7 @@ extern "C" { } ``` -As `ffi_const` has a stricter set of requirements than `ffi_pure`, remove the +As `ffi_const` provides stronger guarantees than `ffi_pure`, remove the `ffi_pure` attribute: ```