From 0081961c57494162d9f2d19265175af95fbdd8d7 Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Wed, 21 Aug 2013 18:57:07 -0400 Subject: [PATCH] Only bug on self-not-mapped-to-def if no previous errors were present. Close #6642. --- src/librustc/middle/resolve.rs | 10 +++++++--- src/test/compile-fail/issue-6642.rs | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 src/test/compile-fail/issue-6642.rs diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 9654bf3fc01f..4a21c0307f26 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -4812,9 +4812,13 @@ impl Resolver { DontAllowCapturingSelf) { Some(dl_def(def)) => return Some(def), _ => { - self.session.span_bug(span, - "self wasn't mapped to a \ - def?!") + if self.session.has_errors() { + // May happen inside a nested fn item, cf #6642. + return None; + } else { + self.session.span_bug(span, + "self wasn't mapped to a def?!") + } } } } diff --git a/src/test/compile-fail/issue-6642.rs b/src/test/compile-fail/issue-6642.rs new file mode 100644 index 000000000000..bffca995b8e3 --- /dev/null +++ b/src/test/compile-fail/issue-6642.rs @@ -0,0 +1,21 @@ +// Copyright 2013 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. + +struct A; +impl A { + fn m(&self) { + fn x() { + self.m() + //~^ ERROR can't capture dynamic environment in a fn item + //~^^ ERROR `self` is not allowed in this context + } + } +} +fn main() {}