1
Fork 0

Structured suggestion for "missing feature intrinsic"

```
error: `size_of_val` is not yet stable as a const intrinsic
  --> $DIR/const-unstable-intrinsic.rs:17:9
   |
LL |         unstable_intrinsic::size_of_val(&x);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: add `#![feature(unstable)]` to the crate attributes to enable
help: add `#![feature(unstable)]` to the crate attributes to enable
   |
LL + #![feature("unstable")]
   |
```
This commit is contained in:
Esteban Küber 2024-12-28 18:37:16 +00:00
parent a47fee50bd
commit 7175da59d3
5 changed files with 27 additions and 4 deletions

View file

@ -819,10 +819,17 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
feature,
..
}) => {
let suggestion =
tcx.hir_crate_items(()).definitions().next().and_then(|id| {
tcx.crate_level_attribute_injection_span(
tcx.local_def_id_to_hir_id(id),
)
});
self.check_op(ops::IntrinsicUnstable {
name: intrinsic.name,
feature,
const_stable_indirect: is_const_stable,
suggestion,
});
}
Some(ConstStability { level: StabilityLevel::Stable { .. }, .. }) => {

View file

@ -447,6 +447,7 @@ pub(crate) struct IntrinsicUnstable {
pub name: Symbol,
pub feature: Symbol,
pub const_stable_indirect: bool,
pub suggestion: Option<Span>,
}
impl<'tcx> NonConstOp<'tcx> for IntrinsicUnstable {
@ -466,6 +467,8 @@ impl<'tcx> NonConstOp<'tcx> for IntrinsicUnstable {
span,
name: self.name,
feature: self.feature,
suggestion: self.suggestion,
help: self.suggestion.is_none(),
})
}
}

View file

@ -123,12 +123,19 @@ pub(crate) struct UnstableConstFn {
#[derive(Diagnostic)]
#[diag(const_eval_unstable_intrinsic)]
#[help]
pub(crate) struct UnstableIntrinsic {
#[primary_span]
pub span: Span,
pub name: Symbol,
pub feature: Symbol,
#[suggestion(
const_eval_unstable_intrinsic_suggestion,
code = "#![feature({feature})]\n",
applicability = "machine-applicable"
)]
pub suggestion: Option<Span>,
#[help(const_eval_unstable_intrinsic_suggestion)]
pub help: bool,
}
#[derive(Diagnostic)]