|
33 | 33 | #![allow(internal_features)] |
34 | 34 | #![feature(rustdoc_internals)] |
35 | 35 | #![doc(rust_logo)] |
| 36 | +#![feature(if_let_guard)] |
36 | 37 | #![feature(box_patterns)] |
37 | 38 | #![feature(let_chains)] |
38 | 39 | #![recursion_limit = "256"] |
@@ -65,6 +66,7 @@ use rustc_session::parse::{add_feature_diagnostics, feature_err}; |
65 | 66 | use rustc_span::symbol::{kw, sym, Ident, Symbol}; |
66 | 67 | use rustc_span::{DesugaringKind, Span, DUMMY_SP}; |
67 | 68 | use smallvec::SmallVec; |
| 69 | +use std::borrow::Cow; |
68 | 70 | use std::collections::hash_map::Entry; |
69 | 71 | use thin_vec::ThinVec; |
70 | 72 |
|
@@ -872,8 +874,24 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { |
872 | 874 | binder: NodeId, |
873 | 875 | generic_params: &[GenericParam], |
874 | 876 | ) -> &'hir [hir::GenericParam<'hir>] { |
875 | | - let mut generic_params: Vec<_> = self |
876 | | - .lower_generic_params_mut(generic_params, hir::GenericParamSource::Binder) |
| 877 | + let mut generic_params: Vec<_> = generic_params |
| 878 | + .iter() |
| 879 | + .map(|param| { |
| 880 | + let param = match param.kind { |
| 881 | + GenericParamKind::Type { ref default } if let Some(ty) = default => { |
| 882 | + self.tcx.sess.emit_err(errors::UnexpectedDefaultParameterInBinder { |
| 883 | + span: ty.span(), |
| 884 | + }); |
| 885 | + let param = GenericParam { |
| 886 | + kind: GenericParamKind::Type { default: None }, |
| 887 | + ..param.clone() |
| 888 | + }; |
| 889 | + Cow::Owned(param) |
| 890 | + } |
| 891 | + _ => Cow::Borrowed(param), |
| 892 | + }; |
| 893 | + self.lower_generic_param(param.as_ref(), hir::GenericParamSource::Binder) |
| 894 | + }) |
877 | 895 | .collect(); |
878 | 896 | let extra_lifetimes = self.resolver.take_extra_lifetime_params(binder); |
879 | 897 | debug!(?extra_lifetimes); |
|
0 commit comments