Skip to content

Commit 9b7d9a9

Browse files
committed
rustc: Treat existential traits as base types for coherence purposes
1 parent fdf0c1b commit 9b7d9a9

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

src/rustc/middle/typeck/coherence.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,15 @@ class CoherenceChecker {
166166
self.get_base_type(base_mutability_and_type.ty)
167167
}
168168

169-
ty_enum(*) | ty_class(*) {
169+
ty_enum(*) | ty_trait(*) | ty_class(*) {
170170
some(original_type)
171171
}
172172

173173
ty_nil | ty_bot | ty_bool | ty_int(*) | ty_uint(*) | ty_float(*) |
174174
ty_str | ty_estr(*) | ty_vec(*) | ty_evec(*) | ty_rec(*) |
175-
ty_fn(*) | ty_trait(*) | ty_tup(*) | ty_var(*) |
176-
ty_var_integral(*) | ty_param(*) | ty_self | ty_constr(*) |
177-
ty_type | ty_opaque_box | ty_opaque_closure_ptr(*) |
178-
ty_unboxed_vec(*) {
175+
ty_fn(*) | ty_tup(*) | ty_var(*) | ty_var_integral(*) |
176+
ty_param(*) | ty_self | ty_constr(*) | ty_type | ty_opaque_box |
177+
ty_opaque_closure_ptr(*) | ty_unboxed_vec(*) {
179178
none
180179
}
181180
}
@@ -189,12 +188,14 @@ class CoherenceChecker {
189188
}
190189
some(base_type) {
191190
alt get(base_type).struct {
192-
ty_enum(def_id, _) | ty_class(def_id, _) {
191+
ty_enum(def_id, _) |
192+
ty_class(def_id, _) |
193+
ty_trait(def_id, _) {
193194
ret some(def_id);
194195
}
195196
_ {
196197
fail "get_base_type() returned a type that wasn't an \
197-
enum or class";
198+
enum, class, or trait";
198199
}
199200
}
200201
}
@@ -394,13 +395,13 @@ class CoherenceChecker {
394395
let results = @dvec();
395396
for items.each |item| {
396397
alt item.node {
397-
item_class(*) | item_enum(*) {
398+
item_class(*) | item_enum(*) | item_trait(*) {
398399
results.push(local_def(item.id));
399400
}
400401

401402
item_const(*) | item_fn(*) | item_mod(*) |
402-
item_foreign_mod(*) | item_ty(*) | item_trait(*) |
403-
item_impl(*) | item_mac(*) {
403+
item_foreign_mod(*) | item_ty(*) | item_impl(*) |
404+
item_mac(*) {
404405
// Nothing to do.
405406
}
406407
}

0 commit comments

Comments
 (0)