use rustc_span::{Span, DUMMY_SP};
use std::cmp::Ordering;
+use std::iter;
use std::mem::replace;
use std::num::NonZeroU32;
{
// Explicit version of iter::order::lt to handle parse errors properly
for (dep_v, stab_v) in
- dep_since.as_str().split('.').zip(stab_since.as_str().split('.'))
+ iter::zip(dep_since.as_str().split('.'), stab_since.as_str().split('.'))
{
match stab_v.parse::<u64>() {
Err(_) => {
fn visit_generic_param(&mut self, p: &'tcx hir::GenericParam<'tcx>) {
let kind = match &p.kind {
- // FIXME(const_generics_defaults)
- hir::GenericParamKind::Type { default, .. } if default.is_some() => {
- AnnotationKind::Container
- }
+ // Allow stability attributes on default generic arguments.
+ hir::GenericParamKind::Type { default: Some(_), .. }
+ | hir::GenericParamKind::Const { default: Some(_), .. } => AnnotationKind::Container,
_ => AnnotationKind::Prohibited,
};
annotator.annotate(
hir::CRATE_HIR_ID,
- krate.item.span,
+ krate.item.inner,
AnnotationKind::Required,
InheritDeprecation::Yes,
InheritConstStability::No,
if tcx.stability().staged_api[&LOCAL_CRATE] {
let krate = tcx.hir().krate();
let mut missing = MissingStabilityAnnotations { tcx, access_levels };
- missing.check_missing_stability(hir::CRATE_HIR_ID, krate.item.span);
+ missing.check_missing_stability(hir::CRATE_HIR_ID, krate.item.inner);
intravisit::walk_crate(&mut missing, krate);
krate.visit_all_item_likes(&mut missing.as_deep_visitor());
}