提交 4f542f9e 编写于 作者: A Ariel Ben-Yehuda 提交者: Ariel Ben-Yehuda

traits with self-containing supertraits are not object safe

This should be the last time I fix this function.

Fixes #38404.
上级 7ef1a69d
......@@ -81,8 +81,10 @@ pub fn astconv_object_safety_violations(self, trait_def_id: DefId)
{
let mut violations = vec![];
if self.supertraits_reference_self(trait_def_id) {
violations.push(ObjectSafetyViolation::SupertraitSelf);
for def_id in traits::supertrait_def_ids(self, trait_def_id) {
if self.supertraits_reference_self(def_id) {
violations.push(ObjectSafetyViolation::SupertraitSelf);
}
}
debug!("astconv_object_safety_violations(trait_def_id={:?}) = {:?}",
......
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
trait A<T>: std::ops::Add<Self> + Sized {}
trait B<T>: A<T> {}
trait C<T>: A<B<T, Output=usize>> {}
//~^ ERROR the trait `B` cannot be made into an object
fn main() {}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册