|
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