From 02635c2d37b7f0a012c9fae1d67723513f3d19c8 Mon Sep 17 00:00:00 2001 From: matthewjasper Date: Thu, 19 Oct 2017 19:48:57 +0100 Subject: [PATCH] Cleanly error for non-const expression in associated const --- src/librustc_resolve/lib.rs | 4 +++- src/test/compile-fail/issue-44239.rs | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/issue-44239.rs diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 4aab43cbec701..c7ec1d072d085 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2084,7 +2084,9 @@ impl<'a> Resolver<'a> { ValueNS, impl_item.span, |n, s| ResolutionError::ConstNotMemberOfTrait(n, s)); - visit::walk_impl_item(this, impl_item); + this.with_constant_rib(|this| + visit::walk_impl_item(this, impl_item) + ); } ImplItemKind::Method(ref sig, _) => { // If this is a trait impl, ensure the method diff --git a/src/test/compile-fail/issue-44239.rs b/src/test/compile-fail/issue-44239.rs new file mode 100644 index 0000000000000..131c65266425b --- /dev/null +++ b/src/test/compile-fail/issue-44239.rs @@ -0,0 +1,19 @@ +// Copyright 2017 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. + +fn main() { + let n = 0; + + struct Foo; + impl Foo { + const N: usize = n; + //~^ ERROR attempt to use a non-constant value + } +}