diff options
| author | bors <bors@rust-lang.org> | 2017-10-22 15:17:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-10-22 15:17:08 +0000 |
| commit | fc1a03d7d0b9b3cc612133c3368cbe45fb658abd (patch) | |
| tree | 3a015092701fb8bcec203779f06a96cb5ece1f05 | |
| parent | 942f31f5eacfc8cbd40c20bbcabc9d37add37410 (diff) | |
| parent | 02635c2d37b7f0a012c9fae1d67723513f3d19c8 (diff) | |
| download | rust-fc1a03d7d0b9b3cc612133c3368cbe45fb658abd.tar.gz rust-fc1a03d7d0b9b3cc612133c3368cbe45fb658abd.zip | |
Auto merge of #45442 - matthewjasper:const-dynamic-capture-error, r=petrochenkov
Cleanly error for non-const variable in associated const Not sure if wrapping the whole `visit::walk_impl_item` call is correct. Closes #44239
| -rw-r--r-- | src/librustc_resolve/lib.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-44239.rs | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 4aab43cbec7..c7ec1d072d0 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 00000000000..131c6526642 --- /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 <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. + +fn main() { + let n = 0; + + struct Foo; + impl Foo { + const N: usize = n; + //~^ ERROR attempt to use a non-constant value + } +} |
