Skip to content

Commit

Permalink
Add own_requires_monomorphization
Browse files Browse the repository at this point in the history
  • Loading branch information
varkor committed Apr 17, 2019
1 parent 6ed6f14 commit a759e2c
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
18 changes: 13 additions & 5 deletions src/librustc/ty/mod.rs
Expand Up @@ -934,12 +934,10 @@ impl<'a, 'gcx, 'tcx> Generics {
}

pub fn requires_monomorphization(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> bool {
for param in &self.params {
match param.kind {
GenericParamDefKind::Type { .. } | GenericParamDefKind::Const => return true,
GenericParamDefKind::Lifetime => {}
}
if self.own_requires_monomorphization() {
return true;
}

if let Some(parent_def_id) = self.parent {
let parent = tcx.generics_of(parent_def_id);
parent.requires_monomorphization(tcx)
Expand All @@ -948,6 +946,16 @@ impl<'a, 'gcx, 'tcx> Generics {
}
}

pub fn own_requires_monomorphization(&self) -> bool {
for param in &self.params {
match param.kind {
GenericParamDefKind::Type { .. } | GenericParamDefKind::Const => return true,
GenericParamDefKind::Lifetime => {}
}
}
false
}

pub fn region_param(&'tcx self,
param: &EarlyBoundRegion,
tcx: TyCtxt<'a, 'gcx, 'tcx>)
Expand Down
3 changes: 1 addition & 2 deletions src/librustc_mir/monomorphize/collector.rs
Expand Up @@ -1135,8 +1135,7 @@ fn create_mono_items_for_default_impls<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
continue;
}

let counts = tcx.generics_of(method.def_id).own_counts();
if counts.types + counts.consts != 0 {
if tcx.generics_of(method.def_id).own_requires_monomorphization() {
continue;
}

Expand Down
3 changes: 1 addition & 2 deletions src/librustc_mir/transform/check_unsafety.rs
Expand Up @@ -560,8 +560,7 @@ fn unsafe_derive_on_repr_packed<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: D

// FIXME: when we make this a hard error, this should have its
// own error code.
let counts = tcx.generics_of(def_id).own_counts();
let message = if counts.types + counts.consts != 0 {
let message = if tcx.generics_of(def_id).own_requires_monomorphization() {
"#[derive] can't be used on a #[repr(packed)] struct with \
type or const parameters (error E0133)".to_string()
} else {
Expand Down

0 comments on commit a759e2c

Please sign in to comment.