From 27ffc3725a3e8bf5cac28094099250bc2d664ec7 Mon Sep 17 00:00:00 2001 From: Chris Midgley Date: Wed, 21 Jul 2021 13:22:57 +0100 Subject: [PATCH] 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`.