]> git.lizzy.rs Git - rust.git/commitdiff
Fix an ICE with a closure in a constant.
authorEli Friedman <eli.friedman@gmail.com>
Fri, 24 Jul 2015 22:51:54 +0000 (15:51 -0700)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 25 Jul 2015 00:00:37 +0000 (17:00 -0700)
Fixes issue #27268.

src/librustc_typeck/check/upvar.rs
src/test/run-pass/issue-27268.rs [new file with mode: 0644]

index 0e3fa654efaadf38a9f71aaca2645ddcc2752f98..f9b7a3308166f48b024f37e796d5e5e2a68a9ed8 100644 (file)
@@ -93,22 +93,8 @@ fn visit_expr(&mut self, expr: &ast::Expr) {
         visit::walk_expr(self, expr);
     }
 
-    fn visit_fn(&mut self,
-                fn_kind: visit::FnKind<'v>,
-                decl: &'v ast::FnDecl,
-                block: &'v ast::Block,
-                span: Span,
-                _id: ast::NodeId)
-    {
-        match fn_kind {
-            visit::FkItemFn(..) | visit::FkMethod(..) => {
-                // ignore nested fn items
-            }
-            visit::FkFnBlock => {
-                visit::walk_fn(self, fn_kind, decl, block, span);
-            }
-        }
-    }
+    // Skip all items; they aren't in the same context.
+    fn visit_item(&mut self, _: &'v ast::Item) { }
 }
 
 impl<'a,'tcx> SeedBorrowKind<'a,'tcx> {
@@ -515,16 +501,12 @@ fn visit_fn(&mut self,
                 span: Span,
                 id: ast::NodeId)
     {
-        match fn_kind {
-            visit::FkItemFn(..) | visit::FkMethod(..) => {
-                // ignore nested fn items
-            }
-            visit::FkFnBlock => {
-                visit::walk_fn(self, fn_kind, decl, body, span);
-                self.analyze_closure(id, span, decl, body);
-            }
-        }
+        visit::walk_fn(self, fn_kind, decl, body, span);
+        self.analyze_closure(id, span, decl, body);
     }
+
+    // Skip all items; they aren't in the same context.
+    fn visit_item(&mut self, _: &'v ast::Item) { }
 }
 
 impl<'a,'tcx> euv::Delegate<'tcx> for AdjustBorrowKind<'a,'tcx> {
diff --git a/src/test/run-pass/issue-27268.rs b/src/test/run-pass/issue-27268.rs
new file mode 100644 (file)
index 0000000..8af850b
--- /dev/null
@@ -0,0 +1,13 @@
+// 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.
+
+fn main() {
+    const _C: &'static Fn() = &||{};
+}