diff options
| author | asquared31415 <34665709+asquared31415@users.noreply.github.com> | 2021-08-29 20:08:40 -0400 |
|---|---|---|
| committer | asquared31415 <34665709+asquared31415@users.noreply.github.com> | 2021-08-29 20:22:19 -0400 |
| commit | fc125a52ec3a342c91ca399cafaeb0504a253991 (patch) | |
| tree | 79601e9ccffd9cbc5c9a2cd84f4199666e8172a7 /src/test | |
| parent | 2f662b14033c4369b0a7b5c2656592ef08edf434 (diff) | |
| download | rust-fc125a52ec3a342c91ca399cafaeb0504a253991.tar.gz rust-fc125a52ec3a342c91ca399cafaeb0504a253991.zip | |
emit specific warning to clarify that foreign items can't have no_mangle
remove extra commented code Deduplicate some diagnostics code add code symbols, machine applicable suggestion clarify error message
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/extern/extern-no-mangle.rs | 30 | ||||
| -rw-r--r-- | src/test/ui/extern/extern-no-mangle.stderr | 42 |
2 files changed, 72 insertions, 0 deletions
diff --git a/src/test/ui/extern/extern-no-mangle.rs b/src/test/ui/extern/extern-no-mangle.rs new file mode 100644 index 00000000000..ab7c9824af0 --- /dev/null +++ b/src/test/ui/extern/extern-no-mangle.rs @@ -0,0 +1,30 @@ +#![warn(unused_attributes)] + +// Tests that placing the #[no_mangle] attribute on a foreign fn or static emits +// a specialized warning. +// The previous warning only talks about a "function or static" but foreign fns/statics +// are also not allowed to have #[no_mangle] + +// build-pass + +extern "C" { + #[no_mangle] + //~^ WARNING `#[no_mangle]` has no effect on a foreign static + //~^^ WARNING this was previously accepted by the compiler + pub static FOO: u8; + + #[no_mangle] + //~^ WARNING `#[no_mangle]` has no effect on a foreign function + //~^^ WARNING this was previously accepted by the compiler + pub fn bar(); +} + +fn no_new_warn() { + // Should emit the generic "not a function or static" warning + #[no_mangle] + //~^ WARNING attribute should be applied to a free function, impl method or static + //~^^ WARNING this was previously accepted by the compiler + let x = 0_u8; +} + +fn main() {} diff --git a/src/test/ui/extern/extern-no-mangle.stderr b/src/test/ui/extern/extern-no-mangle.stderr new file mode 100644 index 00000000000..b5642814114 --- /dev/null +++ b/src/test/ui/extern/extern-no-mangle.stderr @@ -0,0 +1,42 @@ +warning: attribute should be applied to a free function, impl method or static + --> $DIR/extern-no-mangle.rs:24:5 + | +LL | #[no_mangle] + | ^^^^^^^^^^^^ +... +LL | let x = 0_u8; + | ------------- not a free function, impl method or static + | +note: the lint level is defined here + --> $DIR/extern-no-mangle.rs:1:9 + | +LL | #![warn(unused_attributes)] + | ^^^^^^^^^^^^^^^^^ + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + +warning: `#[no_mangle]` has no effect on a foreign static + --> $DIR/extern-no-mangle.rs:11:5 + | +LL | #[no_mangle] + | ^^^^^^^^^^^^ help: remove this attribute +... +LL | pub static FOO: u8; + | ------------------- foreign static + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: symbol names in extern blocks are not mangled + +warning: `#[no_mangle]` has no effect on a foreign function + --> $DIR/extern-no-mangle.rs:16:5 + | +LL | #[no_mangle] + | ^^^^^^^^^^^^ help: remove this attribute +... +LL | pub fn bar(); + | ------------- foreign function + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: symbol names in extern blocks are not mangled + +warning: 3 warnings emitted + |
