use rustc::ty::util::IntTypeExt;
use rustc::ty::{self, AdtKind, Const, DefIdTree, ToPolyTraitRef, Ty, TyCtxt, WithConstness};
use rustc::ty::{ReprOptions, ToPredicate};
+use rustc_attr::{list_contains_name, mark_used, InlineAttr, OptimizeAttr};
use rustc_data_structures::captures::Captures;
use rustc_data_structures::fx::FxHashMap;
use rustc_errors::{struct_span_err, Applicability, StashKey};
use rustc_target::spec::abi;
use syntax::ast;
use syntax::ast::{Ident, MetaItemKind};
-use syntax::attr::{list_contains_name, mark_used, InlineAttr, OptimizeAttr};
struct OnlySelfBounds(bool);
ty::Param(_) => true,
_ => false,
};
- let bad_substs: Vec<_> =
- substs.types().enumerate().filter(|(_, ty)| !is_param(ty)).collect();
+ let bad_substs: Vec<_> = substs
+ .iter()
+ .enumerate()
+ .filter_map(|(i, k)| {
+ if let GenericArgKind::Type(ty) = k.unpack() { Some((i, ty)) } else { None }
+ })
+ .filter(|(_, ty)| !is_param(ty))
+ .collect();
+
if !bad_substs.is_empty() {
let identity_substs = InternalSubsts::identity_for_item(self.tcx, self.def_id);
for (i, bad_subst) in bad_substs {