Skip to content

Commit 86b1067

Browse files
committed
Associated consts are not object safe.
1 parent 15ce540 commit 86b1067

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/librustc/traits/object_safety.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ pub enum ObjectSafetyViolation {
3737

3838
/// Method has something illegal
3939
Method(ast::Name, MethodViolationCode),
40+
41+
/// Associated const
42+
AssociatedConst(ast::Name),
4043
}
4144

4245
impl ObjectSafetyViolation {
@@ -54,6 +57,8 @@ impl ObjectSafetyViolation {
5457
in its arguments or return type", name).into(),
5558
ObjectSafetyViolation::Method(name, MethodViolationCode::Generic) =>
5659
format!("method `{}` has generic type parameters", name).into(),
60+
ObjectSafetyViolation::AssociatedConst(name) =>
61+
format!("the trait cannot contain associated consts, such as `{}`", name),
5762
}
5863
}
5964
}
@@ -141,6 +146,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
141146
violations.push(ObjectSafetyViolation::SupertraitSelf);
142147
}
143148

149+
violations.extend(self.associated_items(trait_def_id)
150+
.filter(|item| item.kind == ty::AssociatedKind::Const)
151+
.map(|item| ObjectSafetyViolation::AssociatedConst(item.name)));
152+
144153
debug!("object_safety_violations_for_trait(trait_def_id={:?}) = {:?}",
145154
trait_def_id,
146155
violations);

0 commit comments

Comments
 (0)