From 8db699d18d263bf779f260ba55221a8c0ff2f5d8 Mon Sep 17 00:00:00 2001 From: Sean Patrick Santos Date: Thu, 21 May 2015 21:12:49 -0600 Subject: [PATCH] Add diagnostic code for generic associated const error. --- src/librustc_typeck/check/mod.rs | 6 +++--- src/librustc_typeck/diagnostics.rs | 1 + src/test/compile-fail/associated-const-type-parameters.rs | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index c9ef935195900..77aded3ccdbac 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -3773,9 +3773,9 @@ pub fn resolve_ty_and_def_ufcs<'a, 'b, 'tcx>(fcx: &FnCtxt<'b, 'tcx>, match def { def::DefAssociatedConst(..) => { if ty::type_has_params(ty) || ty::type_has_self(ty) { - fcx.sess().span_err(span, - "Associated consts cannot depend \ - on type parameters or Self."); + span_err!(fcx.sess(), span, E0329, + "Associated consts cannot depend \ + on type parameters or Self."); fcx.write_error(node_id); return true; } diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index 58d0963274181..200a7bee8331c 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -771,6 +771,7 @@ register_diagnostics! { E0326, // associated const implemented with different type from trait E0327, // referred to method instead of constant in match pattern E0328, // cannot implement Unsize explicitly + E0329, // associated const depends on type parameter or Self. E0366, // dropck forbid specialization to concrete type or region E0367, // dropck forbid specialization to predicate not in struct/enum E0369, // binary operation `` cannot be applied to types diff --git a/src/test/compile-fail/associated-const-type-parameters.rs b/src/test/compile-fail/associated-const-type-parameters.rs index bbe252fc15188..e48ff59d1dc8e 100644 --- a/src/test/compile-fail/associated-const-type-parameters.rs +++ b/src/test/compile-fail/associated-const-type-parameters.rs @@ -14,13 +14,13 @@ pub trait Foo { const MIN: i32; fn get_min() -> i32 { - Self::MIN //~ Associated consts cannot depend on type parameters or Self. + Self::MIN //~ ERROR E0329 } } fn get_min() -> i32 { - T::MIN; //~ Associated consts cannot depend on type parameters or Self. - ::MIN //~ Associated consts cannot depend on type parameters or Self. + T::MIN; //~ ERROR E0329 + ::MIN //~ ERROR E0329 } fn main() {}