From cebb118bff991c47de08461d0d319c3d99b92bcd Mon Sep 17 00:00:00 2001 From: Ariel Ben-Yehuda Date: Tue, 30 Jun 2015 22:03:25 +0300 Subject: [PATCH] Actually encode default associated types Fixes #26636 --- src/librustc/metadata/encoder.rs | 4 ++++ src/librustc/middle/traits/project.rs | 3 +++ .../xcrate_associated_type_defaults.rs | 16 ++++++++++++++++ .../xcrate-associated-type-defaults.rs | 18 ++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 src/test/auxiliary/xcrate_associated_type_defaults.rs create mode 100644 src/test/run-pass/xcrate-associated-type-defaults.rs diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index b844717e6138..b677e7b85703 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1451,6 +1451,10 @@ fn encode_info_for_item(ecx: &EncodeContext, encode_item_sort(rbml_w, 't'); encode_family(rbml_w, 'y'); + if let Some(ty) = associated_type.ty { + encode_type(ecx, rbml_w, ty); + } + is_nonstatic_method = false; } } diff --git a/src/librustc/middle/traits/project.rs b/src/librustc/middle/traits/project.rs index 184de682c67d..e5f7542aa84c 100644 --- a/src/librustc/middle/traits/project.rs +++ b/src/librustc/middle/traits/project.rs @@ -904,6 +904,9 @@ fn confirm_impl_candidate<'cx,'tcx>( // ought to be reported by the type checker method // `check_impl_items_against_trait`, so here we // just return TyError. + debug!("confirm_impl_candidate: no associated type {:?} for {:?}", + assoc_ty.name, + trait_ref); return (selcx.tcx().types.err, vec!()); } } diff --git a/src/test/auxiliary/xcrate_associated_type_defaults.rs b/src/test/auxiliary/xcrate_associated_type_defaults.rs new file mode 100644 index 000000000000..a6b70bf974f9 --- /dev/null +++ b/src/test/auxiliary/xcrate_associated_type_defaults.rs @@ -0,0 +1,16 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { + type Input = usize; + fn bar(&self, _: Self::Input) {} +} + +impl Foo for () {} diff --git a/src/test/run-pass/xcrate-associated-type-defaults.rs b/src/test/run-pass/xcrate-associated-type-defaults.rs new file mode 100644 index 000000000000..1b6de3b2f7bc --- /dev/null +++ b/src/test/run-pass/xcrate-associated-type-defaults.rs @@ -0,0 +1,18 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:xcrate_associated_type_defaults.rs + +extern crate xcrate_associated_type_defaults; +use xcrate_associated_type_defaults::Foo; + +fn main() { + ().bar(5); +}