Control usage of !
through a feature gate.
Adds the `bang_type` feature gate. `!` in a non-return-type position now relies on that feature.
This commit is contained in:
parent
0e1c2aa52e
commit
5096a8c5c0
@ -87,6 +87,7 @@
|
||||
#![feature(staged_api)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(question_mark)]
|
||||
#![cfg_attr(not(stage0), feature(bang_type))]
|
||||
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
|
@ -284,7 +284,10 @@ declare_features! (
|
||||
|
||||
// Allows tuple structs and variants in more contexts,
|
||||
// Permits numeric fields in struct expressions and patterns.
|
||||
(active, relaxed_adts, "1.12.0", Some(35626))
|
||||
(active, relaxed_adts, "1.12.0", Some(35626)),
|
||||
|
||||
// The `!` type
|
||||
(active, bang_type, "1.13.0", Some(35121))
|
||||
);
|
||||
|
||||
declare_features! (
|
||||
@ -963,11 +966,25 @@ impl<'a> Visitor for PostExpansionVisitor<'a> {
|
||||
gate_feature_post!(&self, conservative_impl_trait, ty.span,
|
||||
"`impl Trait` is experimental");
|
||||
}
|
||||
ast::TyKind::Empty => {
|
||||
gate_feature_post!(&self, bang_type, ty.span,
|
||||
"The `!` type is experimental");
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
visit::walk_ty(self, ty)
|
||||
}
|
||||
|
||||
fn visit_fn_ret_ty(&mut self, ret_ty: &ast::FunctionRetTy) {
|
||||
if let ast::FunctionRetTy::Ty(ref output_ty) = *ret_ty {
|
||||
match output_ty.node {
|
||||
ast::TyKind::Empty => return,
|
||||
_ => (),
|
||||
};
|
||||
visit::walk_ty(self, output_ty)
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_expr(&mut self, e: &ast::Expr) {
|
||||
match e.node {
|
||||
ast::ExprKind::Box(_) => {
|
||||
|
@ -4,7 +4,8 @@
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your,
|
||||
// "The `!` type is experimental");
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
@ -128,6 +129,9 @@ pub trait Visitor: Sized {
|
||||
fn visit_vis(&mut self, vis: &Visibility) {
|
||||
walk_vis(self, vis)
|
||||
}
|
||||
fn visit_fn_ret_ty(&mut self, ret_ty: &FunctionRetTy) {
|
||||
walk_fn_ret_ty(self, ret_ty)
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
@ -510,7 +514,7 @@ pub fn walk_fn_decl<V: Visitor>(visitor: &mut V, function_declaration: &FnDecl)
|
||||
visitor.visit_pat(&argument.pat);
|
||||
visitor.visit_ty(&argument.ty)
|
||||
}
|
||||
walk_fn_ret_ty(visitor, &function_declaration.output)
|
||||
visitor.visit_fn_ret_ty(&function_declaration.output)
|
||||
}
|
||||
|
||||
pub fn walk_fn_kind<V: Visitor>(visitor: &mut V, function_kind: FnKind) {
|
||||
|
@ -8,6 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(bang_type)]
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user