diff options
| -rw-r--r-- | src/librustc_typeck/check/mod.rs | 6 | ||||
| -rw-r--r-- | src/test/run-pass/default_ty_param_default_dependent_associated_type.rs | 33 | ||||
| -rw-r--r-- | src/test/run-pass/default_ty_param_dependent_defaults.rs | 18 | ||||
| -rw-r--r-- | src/test/run-pass/default_ty_param_struct_and_type_alias.rs (renamed from src/test/run-pass/default_type_parameter_struct_and_type_alias.rs) | 14 | ||||
| -rw-r--r-- | src/test/run-pass/default_type_parameter_default_dependent_associated_type.rs | 23 | ||||
| -rw-r--r-- | src/test/run-pass/default_type_parameter_dependent_defaults.rs | 7 |
6 files changed, 67 insertions, 34 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 3a93c7ed916..d93848f408c 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1141,7 +1141,11 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> { fn ty_infer(&self, ty_param_def: Option<ty::TypeParameterDef<'tcx>>, span: Span) -> Ty<'tcx> { let default = ty_param_def.and_then(|t| - t.default.map(|ty| type_variable::Default { ty: ty, origin_span: span, definition_span: span })); + t.default.map(|ty| type_variable::Default { + ty: ty, + origin_span: span, + definition_span: span + })); self.infcx().next_ty_var_with_default(default) } diff --git a/src/test/run-pass/default_ty_param_default_dependent_associated_type.rs b/src/test/run-pass/default_ty_param_default_dependent_associated_type.rs new file mode 100644 index 00000000000..fe8c1063c96 --- /dev/null +++ b/src/test/run-pass/default_ty_param_default_dependent_associated_type.rs @@ -0,0 +1,33 @@ +// 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 <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. +// +use std::marker::PhantomData; + +trait Id { + type This; +} + +impl<A> Id for A { + type This = A; +} + +struct Foo<X: Default = usize, Y = <X as Id>::This> { + data: PhantomData<(X, Y)> +} + +impl<X: Default, Y> Foo<X, Y> { + fn new() -> Foo<X, Y> { + Foo { data: PhantomData } + } +} + +fn main() { + let foo = Foo::new(); +} diff --git a/src/test/run-pass/default_ty_param_dependent_defaults.rs b/src/test/run-pass/default_ty_param_dependent_defaults.rs new file mode 100644 index 00000000000..9322c9ad165 --- /dev/null +++ b/src/test/run-pass/default_ty_param_dependent_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 <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. +// + +use std::marker::PhantomData; + +struct Foo<T,U=T> { data: PhantomData<(T, U)> } + +fn main() { + let foo = Foo { data: PhantomData }; +} diff --git a/src/test/run-pass/default_type_parameter_struct_and_type_alias.rs b/src/test/run-pass/default_ty_param_struct_and_type_alias.rs index d42e65d90fe..0a8543c03b1 100644 --- a/src/test/run-pass/default_type_parameter_struct_and_type_alias.rs +++ b/src/test/run-pass/default_ty_param_struct_and_type_alias.rs @@ -1,7 +1,15 @@ -use std::marker::PhantomData; +// 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 <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 TypeEq<A> {} -impl<A> TypeEq<A> for A {} +use std::marker::PhantomData; struct DeterministicHasher; struct RandomHasher; diff --git a/src/test/run-pass/default_type_parameter_default_dependent_associated_type.rs b/src/test/run-pass/default_type_parameter_default_dependent_associated_type.rs deleted file mode 100644 index 402399f14b9..00000000000 --- a/src/test/run-pass/default_type_parameter_default_dependent_associated_type.rs +++ /dev/null @@ -1,23 +0,0 @@ -use std::marker::PhantomData; - -trait Id { - type This; -} - -impl<A> Id for A { - type This = A; -} - -struct Foo<X: Default = usize, Y = <X as Id>::This> { - data: PhantomData<(X, Y)> -} - -impl<X: Default, Y> Foo<X, Y> { - fn new() -> Foo<X, Y> { - Foo { data: PhantomData } - } -} - -fn main() { - let foo = Foo::new(); -} diff --git a/src/test/run-pass/default_type_parameter_dependent_defaults.rs b/src/test/run-pass/default_type_parameter_dependent_defaults.rs deleted file mode 100644 index 4f492bed9d4..00000000000 --- a/src/test/run-pass/default_type_parameter_dependent_defaults.rs +++ /dev/null @@ -1,7 +0,0 @@ -use std::marker::PhantomData; - -struct Foo<T,U=T> { data: PhantomData<(T, U)> } - -fn main() { - let foo = Foo { data: PhantomData }; -} |
