/// Allows rustc to inject a default alloc_error_handler
(active, default_alloc_error_handler, "1.48.0", Some(66741), None),
+ /// Allows argument and return position `impl Trait` in a `const fn`.
+ (active, const_fn_impl_trait, "1.48.0", Some(77463), None),
+
// -------------------------------------------------------------------------
// feature-group-end: actual feature gates
// -------------------------------------------------------------------------
pub struct ImplTrait;
impl NonConstOp for ImplTrait {
fn status_in_item(&self, ccx: &ConstCx<'_, '_>) -> Status {
- mcf_status_in_item(ccx)
+ if ccx.const_kind() != hir::ConstContext::ConstFn {
+ Status::Allowed
+ } else {
+ Status::Unstable(sym::const_fn_impl_trait)
+ }
}
fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> {
- mcf_build_error(ccx, span, "`impl Trait` in const fn is unstable")
+ feature_err(
+ &ccx.tcx.sess.parse_sess,
+ sym::const_fn_impl_trait,
+ span,
+ &format!("`impl Trait` is not allowed in {}s", ccx.const_kind()),
+ )
}
}