1800: make all traits non-enumerable r=flodiebold a=nikomatsakis

As discussed on Zulip, this actually matches the present behavior of rustc.

r? @flodiebold 

Co-authored-by: Niko Matsakis <niko@alum.mit.edu>
This commit is contained in:
bors[bot] 2019-09-09 20:21:27 +00:00 committed by GitHub
commit 5fbdf57c4f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 16 deletions

View file

@ -3007,7 +3007,7 @@ impl<T, U> Into<U> for T where U: From<T> {}
fn test() { S2.into()<|>; } fn test() { S2.into()<|>; }
"#, "#,
); );
assert_eq!(t, "S1"); assert_eq!(t, "{unknown}");
} }
#[test] #[test]
@ -3024,7 +3024,7 @@ impl<T, U: From<T>> Into<U> for T {}
fn test() { S2.into()<|>; } fn test() { S2.into()<|>; }
"#, "#,
); );
assert_eq!(t, "S1"); assert_eq!(t, "{unknown}");
} }
#[test] #[test]
@ -3066,7 +3066,7 @@ impl<B, C> Trait for S<B, C> where C: FnX, B: SendX {}
fn test() { (S {}).method()<|>; } fn test() { (S {}).method()<|>; }
"#, "#,
); );
assert_eq!(t, "{unknown}"); assert_eq!(t, "()");
} }
#[test] #[test]
@ -3546,11 +3546,11 @@ fn test(x: Trait, y: &Trait) -> u64 {
[129; 132) 'bar': fn bar() -> {unknown} [129; 132) 'bar': fn bar() -> {unknown}
[129; 134) 'bar()': {unknown} [129; 134) 'bar()': {unknown}
[140; 141) 'x': {unknown} [140; 141) 'x': {unknown}
[140; 147) 'x.foo()': {unknown} [140; 147) 'x.foo()': u64
[153; 154) 'y': &{unknown} [153; 154) 'y': &{unknown}
[153; 160) 'y.foo()': {unknown} [153; 160) 'y.foo()': u64
[166; 167) 'z': {unknown} [166; 167) 'z': {unknown}
[166; 173) 'z.foo()': {unknown} [166; 173) 'z.foo()': u64
"### "###
); );
} }

View file

@ -356,14 +356,6 @@ fn make_binders<T>(value: T, num_vars: usize) -> chalk_ir::Binders<T> {
} }
} }
fn is_non_enumerable_trait(db: &impl HirDatabase, trait_: Trait) -> bool {
let name = trait_.name(db).unwrap_or_else(crate::Name::missing).to_string();
match &*name {
"Sized" => true,
_ => false,
}
}
fn convert_where_clauses( fn convert_where_clauses(
db: &impl HirDatabase, db: &impl HirDatabase,
def: GenericDef, def: GenericDef,
@ -486,7 +478,7 @@ pub(crate) fn trait_datum_query(
associated_ty_ids: Vec::new(), associated_ty_ids: Vec::new(),
where_clauses: Vec::new(), where_clauses: Vec::new(),
flags: chalk_rust_ir::TraitFlags { flags: chalk_rust_ir::TraitFlags {
non_enumerable: false, non_enumerable: true,
auto: false, auto: false,
marker: false, marker: false,
upstream: true, upstream: true,
@ -503,7 +495,7 @@ pub(crate) fn trait_datum_query(
let flags = chalk_rust_ir::TraitFlags { let flags = chalk_rust_ir::TraitFlags {
auto: trait_.is_auto(db), auto: trait_.is_auto(db),
upstream: trait_.module(db).krate(db) != Some(krate), upstream: trait_.module(db).krate(db) != Some(krate),
non_enumerable: is_non_enumerable_trait(db, trait_), non_enumerable: true,
// FIXME set these flags correctly // FIXME set these flags correctly
marker: false, marker: false,
fundamental: false, fundamental: false,