about summary refs log tree commit diff
path: root/compiler/rustc_error_codes/src/error_codes/E0757.md
blob: fb75b028f45c88db93fd2f1f918e6ca3a03b5685 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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" {
    #[unsafe(ffi_const)]
    #[unsafe(ffi_pure)]
    //~^ ERROR `#[ffi_const]` function cannot be `#[ffi_pure]`
    pub fn square(num: i32) -> i32;
}
```

As `ffi_const` provides stronger guarantees than `ffi_pure`, remove the
`ffi_pure` attribute:

```
#![feature(ffi_const)]

extern "C" {
    #[unsafe(ffi_const)]
    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