about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-10-22 15:17:08 +0000
committerbors <bors@rust-lang.org>2017-10-22 15:17:08 +0000
commitfc1a03d7d0b9b3cc612133c3368cbe45fb658abd (patch)
tree3a015092701fb8bcec203779f06a96cb5ece1f05
parent942f31f5eacfc8cbd40c20bbcabc9d37add37410 (diff)
parent02635c2d37b7f0a012c9fae1d67723513f3d19c8 (diff)
downloadrust-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.rs4
-rw-r--r--src/test/compile-fail/issue-44239.rs19
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
+    }
+}