Make #[link="dl"] a warning rather than an error
(cherry picked from commit 1c85a1dc2e)
This commit is contained in:
parent
d4278373a9
commit
0d2b92cd1e
4 changed files with 47 additions and 28 deletions
|
|
@ -65,10 +65,22 @@ impl<S: Stage> CombineAttributeParser<S> for LinkParser {
|
|||
cx: &'c mut AcceptContext<'_, '_, S>,
|
||||
args: &'c ArgParser<'_>,
|
||||
) -> impl IntoIterator<Item = Self::Item> + 'c {
|
||||
let mut result = None;
|
||||
let Some(items) = args.list() else {
|
||||
cx.expected_list(cx.attr_span);
|
||||
return result;
|
||||
let items = match args {
|
||||
ArgParser::List(list) => list,
|
||||
// This is an edgecase added because making this a hard error would break too many crates
|
||||
// Specifically `#[link = "dl"]` is accepted with a FCW
|
||||
// For more information, see https://github.com/rust-lang/rust/pull/143193
|
||||
ArgParser::NameValue(nv) if nv.value_as_str().is_some_and(|v| v == sym::dl) => {
|
||||
let suggestions = <Self as CombineAttributeParser<S>>::TEMPLATE
|
||||
.suggestions(cx.attr_style, "link");
|
||||
let span = cx.attr_span;
|
||||
cx.emit_lint(AttributeLintKind::IllFormedAttributeInput { suggestions }, span);
|
||||
return None;
|
||||
}
|
||||
_ => {
|
||||
cx.expected_list(cx.attr_span);
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
let sess = cx.sess();
|
||||
|
|
@ -113,7 +125,7 @@ impl<S: Stage> CombineAttributeParser<S> for LinkParser {
|
|||
}
|
||||
};
|
||||
if !cont {
|
||||
return result;
|
||||
return None;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +214,7 @@ impl<S: Stage> CombineAttributeParser<S> for LinkParser {
|
|||
}
|
||||
let Some((name, name_span)) = name else {
|
||||
cx.emit_err(LinkRequiresName { span: cx.attr_span });
|
||||
return result;
|
||||
return None;
|
||||
};
|
||||
|
||||
// Do this outside of the loop so that `import_name_type` can be specified before `kind`.
|
||||
|
|
@ -218,15 +230,14 @@ impl<S: Stage> CombineAttributeParser<S> for LinkParser {
|
|||
cx.emit_err(RawDylibNoNul { span: name_span });
|
||||
}
|
||||
|
||||
result = Some(LinkEntry {
|
||||
Some(LinkEntry {
|
||||
span: cx.attr_span,
|
||||
kind: kind.unwrap_or(NativeLibKind::Unspecified),
|
||||
name,
|
||||
cfg,
|
||||
verbatim,
|
||||
import_name_type,
|
||||
});
|
||||
result
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -871,6 +871,7 @@ symbols! {
|
|||
div,
|
||||
div_assign,
|
||||
diverging_block_default,
|
||||
dl,
|
||||
do_not_recommend,
|
||||
doc,
|
||||
doc_alias,
|
||||
|
|
|
|||
10
tests/ui/attributes/link-dl.allowed.stderr
Normal file
10
tests/ui/attributes/link-dl.allowed.stderr
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
Future incompatibility report: Future breakage diagnostic:
|
||||
warning: valid forms for the attribute are `#[link(name = "...")]`, `#[link(name = "...", import_name_type = "decorated|noprefix|undecorated")]`, `#[link(name = "...", kind = "dylib|static|...")]`, `#[link(name = "...", kind = "dylib|static|...", wasm_import_module = "...", import_name_type = "decorated|noprefix|undecorated")]`, and `#[link(name = "...", wasm_import_module = "...")]`
|
||||
--> $DIR/link-dl.rs:14:1
|
||||
|
|
||||
LL | #[link="dl"]
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
|
||||
|
||||
|
|
@ -1,26 +1,23 @@
|
|||
error[E0539]: malformed `link` attribute input
|
||||
error: valid forms for the attribute are `#[link(name = "...")]`, `#[link(name = "...", import_name_type = "decorated|noprefix|undecorated")]`, `#[link(name = "...", kind = "dylib|static|...")]`, `#[link(name = "...", kind = "dylib|static|...", wasm_import_module = "...", import_name_type = "decorated|noprefix|undecorated")]`, and `#[link(name = "...", wasm_import_module = "...")]`
|
||||
--> $DIR/link-dl.rs:14:1
|
||||
|
|
||||
LL | #[link="dl"]
|
||||
| ^^^^^^^^^^^^ expected this to be a list
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: for more information, visit <https://doc.rust-lang.org/reference/items/external-blocks.html#the-link-attribute>
|
||||
help: try changing it to one of the following valid forms of the attribute
|
||||
|
|
||||
LL - #[link="dl"]
|
||||
LL + #[link(name = "...")]
|
||||
|
|
||||
LL - #[link="dl"]
|
||||
LL + #[link(name = "...", import_name_type = "decorated|noprefix|undecorated")]
|
||||
|
|
||||
LL - #[link="dl"]
|
||||
LL + #[link(name = "...", kind = "dylib|static|...")]
|
||||
|
|
||||
LL - #[link="dl"]
|
||||
LL + #[link(name = "...", kind = "dylib|static|...", wasm_import_module = "...", import_name_type = "decorated|noprefix|undecorated")]
|
||||
|
|
||||
= and 1 other candidate
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
|
||||
= note: `#[deny(ill_formed_attribute_input)]` (part of `#[deny(future_incompatible)]`) on by default
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0539`.
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
error: valid forms for the attribute are `#[link(name = "...")]`, `#[link(name = "...", import_name_type = "decorated|noprefix|undecorated")]`, `#[link(name = "...", kind = "dylib|static|...")]`, `#[link(name = "...", kind = "dylib|static|...", wasm_import_module = "...", import_name_type = "decorated|noprefix|undecorated")]`, and `#[link(name = "...", wasm_import_module = "...")]`
|
||||
--> $DIR/link-dl.rs:14:1
|
||||
|
|
||||
LL | #[link="dl"]
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
|
||||
= note: `#[deny(ill_formed_attribute_input)]` (part of `#[deny(future_incompatible)]`) on by default
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue