From 15f97acdc87087e7747900be83d038757b86fb25 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 20 May 2013 13:02:08 -0500 Subject: [PATCH] Correctly track the source of imports with the same name --- src/libcore/vec.rs | 2 +- src/librustc/middle/resolve.rs | 4 +++ .../lint-unused-import-tricky-names.rs | 29 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/lint-unused-import-tricky-names.rs diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 14dcde2381bf3..65f8dab25a5aa 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -22,7 +22,7 @@ use old_iter; use iterator::Iterator; use kinds::Copy; use libc; -use old_iter::{BaseIter, CopyableIter}; +use old_iter::CopyableIter; use option::{None, Option, Some}; use ptr::to_unsafe_ptr; use ptr; diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 1568c3e55352f..ef0bf6ad0e05d 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1818,6 +1818,10 @@ pub impl Resolver { debug!("(building import directive) bumping \ reference"); resolution.outstanding_references += 1; + + // the source of this name is different now + resolution.privacy = privacy; + resolution.id = id; } None => { debug!("(building import directive) creating new"); diff --git a/src/test/compile-fail/lint-unused-import-tricky-names.rs b/src/test/compile-fail/lint-unused-import-tricky-names.rs new file mode 100644 index 0000000000000..e36b5572909d8 --- /dev/null +++ b/src/test/compile-fail/lint-unused-import-tricky-names.rs @@ -0,0 +1,29 @@ +// 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. + +#[deny(unused_imports)]; + +// Regression test for issue #6633 + +use foo::name::name; //~ ERROR: unused import +use foo::name; + +pub mod foo { + pub mod name { + pub type a = int; + pub mod name { + pub type a = float; + } + } +} + +fn bar() -> name::a { 1 } + +fn main(){}