Skip to content

Commit cad1b18

Browse files
author
Alexander Regueiro
committed
Added feature gate.
1 parent 01f49f0 commit cad1b18

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

src/librustc/hir/lowering.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ enum ImplTraitContext<'a> {
200200
Disallowed(ImplTraitPosition),
201201
}
202202

203-
/// Position in which `impl Trait` is disallowed. Used for error reporting.
203+
/// Position in which `impl Trait` is disallowed.
204204
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
205205
enum ImplTraitPosition {
206206
/// Disallowed in `let` / `const` / `static` bindings.

src/libsyntax/feature_gate.rs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
use AttributeType::*;
1616
use AttributeGate::*;
1717

18-
use crate::ast::{self, NodeId, GenericParam, GenericParamKind, PatKind, RangeEnd};
18+
use crate::ast::{
19+
self, AssocTyConstraint, AssocTyConstraintKind, NodeId, GenericParam, GenericParamKind,
20+
PatKind, RangeEnd,
21+
};
1922
use crate::attr;
2023
use crate::early_buffered_lints::BufferedEarlyLintId;
2124
use crate::source_map::Spanned;
@@ -554,6 +557,9 @@ declare_features! (
554557
// Allows using C-variadics.
555558
(active, c_variadic, "1.34.0", Some(44930), None),
556559

560+
// Allows the user of associated type bounds.
561+
(active, associated_type_bounds, "1.34.0", Some(52662), None),
562+
557563
// -------------------------------------------------------------------------
558564
// feature-group-end: actual feature gates
559565
// -------------------------------------------------------------------------
@@ -1917,7 +1923,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
19171923
self.builtin_attributes.get(&ident.name).map(|a| *a)
19181924
});
19191925

1920-
// check for gated attributes
1926+
// Check for gated attributes.
19211927
self.context.check_attribute(attr, attr_info, false);
19221928

19231929
if attr.check_name(sym::doc) {
@@ -2115,7 +2121,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
21152121
fn visit_fn_ret_ty(&mut self, ret_ty: &'a ast::FunctionRetTy) {
21162122
if let ast::FunctionRetTy::Ty(ref output_ty) = *ret_ty {
21172123
if let ast::TyKind::Never = output_ty.node {
2118-
// Do nothing
2124+
// Do nothing.
21192125
} else {
21202126
self.visit_ty(output_ty)
21212127
}
@@ -2171,7 +2177,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
21712177
}
21722178
_ => {}
21732179
}
2174-
visit::walk_expr(self, e);
2180+
visit::walk_expr(self, e)
21752181
}
21762182

21772183
fn visit_arm(&mut self, arm: &'a ast::Arm) {
@@ -2220,15 +2226,27 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
22202226
gate_feature_post!(&self, c_variadic, span, "C-variadic functions are unstable");
22212227
}
22222228

2223-
visit::walk_fn(self, fn_kind, fn_decl, span);
2229+
visit::walk_fn(self, fn_kind, fn_decl, span)
22242230
}
22252231

22262232
fn visit_generic_param(&mut self, param: &'a GenericParam) {
2227-
if let GenericParamKind::Const { .. } = param.kind {
2228-
gate_feature_post!(&self, const_generics, param.ident.span,
2229-
"const generics are unstable");
2233+
match param.kind {
2234+
GenericParamKind::Const { .. } =>
2235+
gate_feature_post!(&self, const_generics, param.ident.span,
2236+
"const generics are unstable"),
2237+
_ => {}
2238+
}
2239+
visit::walk_generic_param(self, param)
2240+
}
2241+
2242+
fn visit_assoc_ty_constraint(&mut self, constraint: &'a AssocTyConstraint) {
2243+
match constraint.kind {
2244+
AssocTyConstraintKind::Bound { .. } =>
2245+
gate_feature_post!(&self, associated_type_bounds, constraint.span,
2246+
"associated type bounds are unstable"),
2247+
_ => {}
22302248
}
2231-
visit::walk_generic_param(self, param);
2249+
visit::walk_assoc_ty_constraint(self, constraint)
22322250
}
22332251

22342252
fn visit_trait_item(&mut self, ti: &'a ast::TraitItem) {
@@ -2266,7 +2284,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
22662284
}
22672285
_ => {}
22682286
}
2269-
visit::walk_trait_item(self, ti);
2287+
visit::walk_trait_item(self, ti)
22702288
}
22712289

22722290
fn visit_impl_item(&mut self, ii: &'a ast::ImplItem) {
@@ -2298,15 +2316,15 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
22982316
}
22992317
_ => {}
23002318
}
2301-
visit::walk_impl_item(self, ii);
2319+
visit::walk_impl_item(self, ii)
23022320
}
23032321

23042322
fn visit_vis(&mut self, vis: &'a ast::Visibility) {
23052323
if let ast::VisibilityKind::Crate(ast::CrateSugar::JustCrate) = vis.node {
23062324
gate_feature_post!(&self, crate_visibility_modifier, vis.span,
23072325
"`crate` visibility modifier is experimental");
23082326
}
2309-
visit::walk_vis(self, vis);
2327+
visit::walk_vis(self, vis)
23102328
}
23112329
}
23122330

0 commit comments

Comments
 (0)