|
1 | 1 | use rustc_ast as ast; |
2 | 2 | use rustc_ast::visit::{self, AssocCtxt, FnCtxt, FnKind, Visitor}; |
3 | 3 | use rustc_ast::{AssocConstraint, AssocConstraintKind, NodeId}; |
4 | | -use rustc_ast::{PatKind, RangeEnd, VariantData}; |
| 4 | +use rustc_ast::{PatKind, RangeEnd}; |
5 | 5 | use rustc_errors::{struct_span_err, Applicability, StashKey}; |
6 | 6 | use rustc_feature::{AttributeGate, BuiltinAttribute, Features, GateIssue, BUILTIN_ATTRIBUTE_MAP}; |
7 | 7 | use rustc_session::parse::{feature_err, feature_err_issue, feature_warn}; |
@@ -116,46 +116,6 @@ impl<'a> PostExpansionVisitor<'a> { |
116 | 116 | } |
117 | 117 | } |
118 | 118 |
|
119 | | - fn maybe_report_invalid_custom_discriminants(&self, variants: &[ast::Variant]) { |
120 | | - let has_fields = variants.iter().any(|variant| match variant.data { |
121 | | - VariantData::Tuple(..) | VariantData::Struct(..) => true, |
122 | | - VariantData::Unit(..) => false, |
123 | | - }); |
124 | | - |
125 | | - let discriminant_spans = variants |
126 | | - .iter() |
127 | | - .filter(|variant| match variant.data { |
128 | | - VariantData::Tuple(..) | VariantData::Struct(..) => false, |
129 | | - VariantData::Unit(..) => true, |
130 | | - }) |
131 | | - .filter_map(|variant| variant.disr_expr.as_ref().map(|c| c.value.span)) |
132 | | - .collect::<Vec<_>>(); |
133 | | - |
134 | | - if !discriminant_spans.is_empty() && has_fields { |
135 | | - let mut err = feature_err( |
136 | | - &self.sess.parse_sess, |
137 | | - sym::arbitrary_enum_discriminant, |
138 | | - discriminant_spans.clone(), |
139 | | - "custom discriminant values are not allowed in enums with tuple or struct variants", |
140 | | - ); |
141 | | - for sp in discriminant_spans { |
142 | | - err.span_label(sp, "disallowed custom discriminant"); |
143 | | - } |
144 | | - for variant in variants.iter() { |
145 | | - match &variant.data { |
146 | | - VariantData::Struct(..) => { |
147 | | - err.span_label(variant.span, "struct variant defined here"); |
148 | | - } |
149 | | - VariantData::Tuple(..) => { |
150 | | - err.span_label(variant.span, "tuple variant defined here"); |
151 | | - } |
152 | | - VariantData::Unit(..) => {} |
153 | | - } |
154 | | - } |
155 | | - err.emit(); |
156 | | - } |
157 | | - } |
158 | | - |
159 | 119 | /// Feature gate `impl Trait` inside `type Alias = $type_expr;`. |
160 | 120 | fn check_impl_trait(&self, ty: &ast::Ty) { |
161 | 121 | struct ImplTraitVisitor<'a> { |
@@ -273,26 +233,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { |
273 | 233 | } |
274 | 234 | } |
275 | 235 |
|
276 | | - ast::ItemKind::Enum(ast::EnumDef { ref variants, .. }, ..) => { |
277 | | - for variant in variants { |
278 | | - match (&variant.data, &variant.disr_expr) { |
279 | | - (ast::VariantData::Unit(..), _) => {} |
280 | | - (_, Some(disr_expr)) => gate_feature_post!( |
281 | | - &self, |
282 | | - arbitrary_enum_discriminant, |
283 | | - disr_expr.value.span, |
284 | | - "discriminants on non-unit variants are experimental" |
285 | | - ), |
286 | | - _ => {} |
287 | | - } |
288 | | - } |
289 | | - |
290 | | - let has_feature = self.features.arbitrary_enum_discriminant; |
291 | | - if !has_feature && !i.span.allows_unstable(sym::arbitrary_enum_discriminant) { |
292 | | - self.maybe_report_invalid_custom_discriminants(&variants); |
293 | | - } |
294 | | - } |
295 | | - |
296 | 236 | ast::ItemKind::Impl(box ast::Impl { polarity, defaultness, ref of_trait, .. }) => { |
297 | 237 | if let ast::ImplPolarity::Negative(span) = polarity { |
298 | 238 | gate_feature_post!( |
|
0 commit comments