Skip to content

Commit 05d2478

Browse files
committed
Rollup merge of rust-lang#30325 - jseyfried:fixes_30078, r=nrc
This fixes a bug in which unused imports can get wrongly marked as used when checking for unused qualifications in `resolve_path` (issue rust-lang#30078), and it removes unused imports that were previously undetected because of the bug.
2 parents 948669f + 83dde14 commit 05d2478

File tree

44 files changed

+60
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+60
-75
lines changed

src/compiletest/runtest.rs

-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
use self::TargetLocation::*;
12-
1311
use common::Config;
1412
use common::{CompileFail, ParseFail, Pretty, RunFail, RunPass, RunPassValgrind};
1513
use common::{Codegen, DebugInfoLldb, DebugInfoGdb, Rustdoc};

src/libcollections/btree/node.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use core::marker::PhantomData;
2323
use core::ops::{Deref, DerefMut, Index, IndexMut};
2424
use core::ptr::Unique;
2525
use core::{slice, mem, ptr, cmp};
26-
use alloc::heap::{self, EMPTY};
26+
use alloc::heap;
2727

2828
use borrow::Borrow;
2929

src/libcollections/string.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use core::fmt;
2323
use core::hash;
2424
use core::iter::FromIterator;
2525
use core::mem;
26-
use core::ops::{self, Deref, Add, Index};
26+
use core::ops::{self, Add};
2727
use core::ptr;
2828
use core::slice;
2929
use core::str::pattern::Pattern;

src/libcollections/vec.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ use core::hash::{self, Hash};
6868
use core::intrinsics::{arith_offset, assume, needs_drop};
6969
use core::iter::FromIterator;
7070
use core::mem;
71-
use core::ops::{Index, IndexMut, Deref};
71+
use core::ops::{Index, IndexMut};
7272
use core::ops;
7373
use core::ptr;
7474
use core::slice;

src/libcore/slice.rs

-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ use result::Result;
4848
use result::Result::{Ok, Err};
4949
use ptr;
5050
use mem;
51-
use mem::size_of;
5251
use marker::{Send, Sync, self};
5352
use num::wrapping::OverflowingOps;
5453
use raw::Repr;

src/librustc/lint/context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use self::TargetLint::*;
2727

2828
use middle::privacy::AccessLevels;
29-
use middle::ty::{self, Ty};
29+
use middle::ty;
3030
use session::{early_error, Session};
3131
use lint::{Level, LevelSource, Lint, LintId, LintArray, LintPass};
3232
use lint::{EarlyLintPass, EarlyLintPassObject, LateLintPass, LateLintPassObject};

src/librustc/middle/infer/combine.rs

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ use super::{InferCtxt};
4141
use super::{MiscVariable, TypeTrace};
4242
use super::type_variable::{RelationDir, BiTo, EqTo, SubtypeOf, SupertypeOf};
4343

44-
use middle::ty::{TyVar};
4544
use middle::ty::{IntType, UintType};
4645
use middle::ty::{self, Ty};
4746
use middle::ty::error::TypeError;

src/librustc/middle/infer/mod.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ use middle::region::CodeExtent;
2727
use middle::subst;
2828
use middle::subst::Substs;
2929
use middle::subst::Subst;
30-
use middle::traits::{self, FulfillmentContext, Normalized,
31-
SelectionContext, ObligationCause};
30+
use middle::traits;
3231
use middle::ty::adjustment;
33-
use middle::ty::{TyVid, IntVid, FloatVid, RegionVid};
32+
use middle::ty::{TyVid, IntVid, FloatVid};
3433
use middle::ty::{self, Ty, HasTypeFlags};
3534
use middle::ty::error::{ExpectedFound, TypeError, UnconstrainedNumeric};
3635
use middle::ty::fold::{TypeFolder, TypeFoldable};

src/librustc/middle/infer/region_inference/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use rustc_data_structures::graph::{self, Direction, NodeIndex};
2323
use rustc_data_structures::unify::{self, UnificationTable};
2424
use middle::free_region::FreeRegionMap;
2525
use middle::ty::{self, Ty};
26-
use middle::ty::{BoundRegion, FreeRegion, Region, RegionVid};
26+
use middle::ty::{BoundRegion, Region, RegionVid};
2727
use middle::ty::{ReEmpty, ReStatic, ReFree, ReEarlyBound};
2828
use middle::ty::{ReLateBound, ReScope, ReVar, ReSkolemized, BrFresh};
2929
use middle::ty::error::TypeError;

src/librustc/middle/stability.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use syntax::attr::{self, Stability, Deprecation, AttrMetaMethods};
2929
use util::nodemap::{DefIdMap, FnvHashSet, FnvHashMap};
3030

3131
use rustc_front::hir;
32-
use rustc_front::hir::{Block, Crate, Item, Generics, StructField, Variant};
32+
use rustc_front::hir::{Crate, Item, Generics, StructField, Variant};
3333
use rustc_front::intravisit::{self, Visitor};
3434

3535
use std::mem::replace;

src/librustc/middle/ty/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use middle::cstore::{self, CrateStore, LOCAL_CRATE};
2626
use middle::def::{self, ExportMap};
2727
use middle::def_id::DefId;
2828
use middle::lang_items::{FnTraitLangItem, FnMutTraitLangItem, FnOnceTraitLangItem};
29-
use middle::subst::{self, ParamSpace, Subst, Substs, VecPerParamSpace};
29+
use middle::subst::{self, Subst, Substs, VecPerParamSpace};
3030
use middle::traits;
3131
use middle::ty;
3232
use middle::ty::fold::TypeFolder;
@@ -51,7 +51,6 @@ use syntax::parse::token::{InternedString, special_idents};
5151

5252
use rustc_front::hir;
5353
use rustc_front::hir::{ItemImpl, ItemTrait};
54-
use rustc_front::hir::{MutImmutable, MutMutable, Visibility};
5554

5655
pub use self::sty::{Binder, DebruijnIndex};
5756
pub use self::sty::{BuiltinBound, BuiltinBounds, ExistentialBounds};

src/librustc/util/ppaux.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@
1111

1212
use middle::def_id::DefId;
1313
use middle::subst::{self, Subst};
14-
use middle::ty::{BoundRegion, BrAnon, BrNamed};
15-
use middle::ty::{ReEarlyBound, BrFresh, ctxt};
16-
use middle::ty::{ReFree, ReScope, ReStatic, Region, ReEmpty};
17-
use middle::ty::{ReSkolemized, ReVar, BrEnv};
14+
use middle::ty::{BrAnon, BrEnv, BrFresh, BrNamed};
1815
use middle::ty::{TyBool, TyChar, TyStruct, TyEnum};
1916
use middle::ty::{TyError, TyStr, TyArray, TySlice, TyFloat, TyBareFn};
2017
use middle::ty::{TyParam, TyRawPtr, TyRef, TyTuple};
2118
use middle::ty::TyClosure;
2219
use middle::ty::{TyBox, TyTrait, TyInt, TyUint, TyInfer};
23-
use middle::ty::{self, TypeAndMut, Ty, HasTypeFlags};
20+
use middle::ty::{self, Ty, HasTypeFlags};
2421
use middle::ty::fold::TypeFoldable;
2522

2623
use std::fmt;

src/librustc_borrowck/borrowck/gather_loans/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use syntax::ast;
2929
use syntax::codemap::Span;
3030
use syntax::ast::NodeId;
3131
use rustc_front::hir;
32-
use rustc_front::hir::{Expr, FnDecl, Block, Pat};
32+
use rustc_front::hir::Expr;
3333
use rustc_front::intravisit;
3434
use rustc_front::intravisit::Visitor;
3535

src/librustc_borrowck/borrowck/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use rustc::middle::ty::{self, Ty};
3838
use std::fmt;
3939
use std::mem;
4040
use std::rc::Rc;
41-
use syntax::ast::{self, NodeId};
41+
use syntax::ast;
4242
use syntax::codemap::Span;
4343

4444
use rustc_front::hir;

src/librustc_metadata/tls_context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rbml::reader::Decoder as RbmlDecoder;
1616
use rustc::middle::cstore::tls;
1717
use rustc::middle::def_id::DefId;
1818
use rustc::middle::subst::Substs;
19-
use rustc::middle::ty::{self, Ty};
19+
use rustc::middle::ty;
2020

2121
use decoder::{self, Cmd};
2222
use encoder;

src/librustc_privacy/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use rustc::middle::privacy::ImportUse::*;
4545
use rustc::middle::privacy::LastPrivate::*;
4646
use rustc::middle::privacy::PrivateDep::*;
4747
use rustc::middle::privacy::ExternalExports;
48-
use rustc::middle::ty::{self, Ty};
48+
use rustc::middle::ty;
4949
use rustc::util::nodemap::NodeMap;
5050
use rustc::front::map as ast_map;
5151

src/librustc_resolve/build_reduced_graph.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ use syntax::parse::token::special_idents;
3838
use syntax::codemap::{Span, DUMMY_SP};
3939

4040
use rustc_front::hir;
41-
use rustc_front::hir::{Block, Crate, DeclItem};
41+
use rustc_front::hir::{Block, DeclItem};
4242
use rustc_front::hir::{ForeignItem, ForeignItemFn, ForeignItemStatic};
4343
use rustc_front::hir::{Item, ItemConst, ItemEnum, ItemExternCrate, ItemFn};
4444
use rustc_front::hir::{ItemForeignMod, ItemImpl, ItemMod, ItemStatic, ItemDefaultImpl};
4545
use rustc_front::hir::{ItemStruct, ItemTrait, ItemTy, ItemUse};
46-
use rustc_front::hir::{NamedField, PathListIdent, PathListMod, Public};
46+
use rustc_front::hir::{NamedField, PathListIdent, PathListMod};
4747
use rustc_front::hir::StmtDecl;
4848
use rustc_front::hir::UnnamedField;
4949
use rustc_front::hir::{Variant, ViewPathGlob, ViewPathList, ViewPathSimple};

src/librustc_resolve/lib.rs

+21-16
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ use rustc::middle::ty::{Freevar, FreevarMap, TraitMap, GlobMap};
6464
use rustc::util::nodemap::{NodeMap, DefIdSet, FnvHashMap};
6565

6666
use syntax::ast;
67-
use syntax::ast::{CRATE_NODE_ID, Ident, Name, NodeId, CrateNum, TyIs, TyI8, TyI16, TyI32, TyI64};
67+
use syntax::ast::{CRATE_NODE_ID, Name, NodeId, CrateNum, TyIs, TyI8, TyI16, TyI32, TyI64};
6868
use syntax::ast::{TyUs, TyU8, TyU16, TyU32, TyU64, TyF64, TyF32};
6969
use syntax::attr::AttrMetaMethods;
7070
use syntax::parse::token::{self, special_names, special_idents};
@@ -1463,7 +1463,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14631463
fn resolve_item_in_lexical_scope(&mut self,
14641464
module_: Rc<Module>,
14651465
name: Name,
1466-
namespace: Namespace)
1466+
namespace: Namespace,
1467+
record_used: bool)
14671468
-> ResolveResult<(Target, bool)> {
14681469
debug!("(resolving item in lexical scope) resolving `{}` in namespace {:?} in `{}`",
14691470
name,
@@ -1503,10 +1504,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
15031504
debug!("(resolving item in lexical scope) using import resolution");
15041505
// track used imports and extern crates as well
15051506
let id = import_resolution[namespace].id;
1506-
self.used_imports.insert((id, namespace));
1507-
self.record_import_use(id, name);
1508-
if let Some(DefId{krate: kid, ..}) = target.target_module.def_id() {
1509-
self.used_crates.insert(kid);
1507+
if record_used {
1508+
self.used_imports.insert((id, namespace));
1509+
self.record_import_use(id, name);
1510+
if let Some(DefId{krate: kid, ..}) = target.target_module.def_id() {
1511+
self.used_crates.insert(kid);
1512+
}
15101513
}
15111514
return Success((target, false));
15121515
}
@@ -1583,7 +1586,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
15831586
-> ResolveResult<Rc<Module>> {
15841587
// If this module is an anonymous module, resolve the item in the
15851588
// lexical scope. Otherwise, resolve the item from the crate root.
1586-
let resolve_result = self.resolve_item_in_lexical_scope(module_, name, TypeNS);
1589+
let resolve_result = self.resolve_item_in_lexical_scope(module_, name, TypeNS, true);
15871590
match resolve_result {
15881591
Success((target, _)) => {
15891592
if let Some(module_def) = target.binding.module() {
@@ -2791,7 +2794,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
27912794
span: Span)
27922795
-> BareIdentifierPatternResolution {
27932796
let module = self.current_module.clone();
2794-
match self.resolve_item_in_lexical_scope(module, name, ValueNS) {
2797+
match self.resolve_item_in_lexical_scope(module, name, ValueNS, true) {
27952798
Success((target, _)) => {
27962799
debug!("(resolve bare identifier pattern) succeeded in finding {} at {:?}",
27972800
name,
@@ -2899,17 +2902,16 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
28992902
}
29002903

29012904
// Try to find a path to an item in a module.
2902-
let unqualified_def = self.resolve_identifier(segments.last().unwrap().identifier,
2903-
namespace,
2904-
check_ribs);
2905-
2905+
let last_ident = segments.last().unwrap().identifier;
29062906
if segments.len() <= 1 {
2907+
let unqualified_def = self.resolve_identifier(last_ident, namespace, check_ribs, true);
29072908
return unqualified_def.and_then(|def| self.adjust_local_def(def, span))
29082909
.map(|def| {
29092910
PathResolution::new(def, LastMod(AllPublic), path_depth)
29102911
});
29112912
}
29122913

2914+
let unqualified_def = self.resolve_identifier(last_ident, namespace, check_ribs, false);
29132915
let def = self.resolve_module_relative_path(span, segments, namespace);
29142916
match (def, unqualified_def) {
29152917
(Some((ref d, _)), Some(ref ud)) if *d == ud.def => {
@@ -2929,7 +2931,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
29292931
fn resolve_identifier(&mut self,
29302932
identifier: hir::Ident,
29312933
namespace: Namespace,
2932-
check_ribs: bool)
2934+
check_ribs: bool,
2935+
record_used: bool)
29332936
-> Option<LocalDef> {
29342937
// First, check to see whether the name is a primitive type.
29352938
if namespace == TypeNS {
@@ -2946,7 +2949,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
29462949
}
29472950
}
29482951

2949-
self.resolve_item_by_name_in_lexical_scope(identifier.unhygienic_name, namespace)
2952+
let name = identifier.unhygienic_name;
2953+
self.resolve_item_by_name_in_lexical_scope(name, namespace, record_used)
29502954
.map(LocalDef::from_def)
29512955
}
29522956

@@ -3197,11 +3201,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
31973201

31983202
fn resolve_item_by_name_in_lexical_scope(&mut self,
31993203
name: Name,
3200-
namespace: Namespace)
3204+
namespace: Namespace,
3205+
record_used: bool)
32013206
-> Option<Def> {
32023207
// Check the items.
32033208
let module = self.current_module.clone();
3204-
match self.resolve_item_in_lexical_scope(module, name, namespace) {
3209+
match self.resolve_item_in_lexical_scope(module, name, namespace, record_used) {
32053210
Success((target, _)) => {
32063211
match target.binding.def() {
32073212
None => {

src/librustc_trans/save/dump_csv.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ use session::Session;
3434

3535
use middle::def;
3636
use middle::def_id::DefId;
37-
use middle::ty::{self, Ty};
37+
use middle::ty;
3838

3939
use std::fs::File;
40-
use std::path::Path;
4140

4241
use syntax::ast::{self, NodeId};
4342
use syntax::codemap::*;

src/librustc_trans/trans/closure.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use trans::build::*;
2020
use trans::callee::{self, ArgVals, Callee, TraitItem, MethodData};
2121
use trans::cleanup::{CleanupMethods, CustomScope, ScopeId};
2222
use trans::common::*;
23-
use trans::datum::{self, Datum, rvalue_scratch_datum, Rvalue, ByValue};
23+
use trans::datum::{self, Datum, rvalue_scratch_datum, Rvalue};
2424
use trans::debuginfo::{self, DebugLoc};
2525
use trans::declare;
2626
use trans::expr;

src/librustc_trans/trans/debuginfo/gdb.rs

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
// .debug_gdb_scripts binary section.
1212

1313
use llvm;
14-
use llvm::ValueRef;
1514

1615
use trans::common::{C_bytes, CrateContext, C_i32};
1716
use trans::declare;

src/librustc_trans/trans/intrinsic.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use arena::TypedArena;
1414
use intrinsics::{self, Intrinsic};
1515
use libc;
1616
use llvm;
17-
use llvm::{SequentiallyConsistent, Acquire, Release, AtomicXchg, ValueRef, TypeKind};
17+
use llvm::{ValueRef, TypeKind};
1818
use middle::infer;
1919
use middle::subst;
2020
use middle::subst::FnSpace;
@@ -32,10 +32,8 @@ use trans::debuginfo::DebugLoc;
3232
use trans::declare;
3333
use trans::expr;
3434
use trans::glue;
35-
use trans::type_of::*;
3635
use trans::type_of;
3736
use trans::machine;
38-
use trans::machine::llsize_of;
3937
use trans::type_::Type;
4038
use middle::ty::{self, Ty, HasTypeFlags};
4139
use middle::subst::Substs;

src/librustc_trans/trans/meth.rs

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use trans::consts;
2828
use trans::datum::*;
2929
use trans::debuginfo::DebugLoc;
3030
use trans::declare;
31-
use trans::expr::SaveIn;
3231
use trans::expr;
3332
use trans::glue;
3433
use trans::machine;

src/librustc_typeck/check/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ use middle::pat_util::{self, pat_id_map};
9393
use middle::privacy::{AllPublic, LastMod};
9494
use middle::subst::{self, Subst, Substs, VecPerParamSpace, ParamSpace, TypeSpace};
9595
use middle::traits::{self, report_fulfillment_errors};
96-
use middle::ty::{FnSig, GenericPredicates, TypeScheme};
96+
use middle::ty::{GenericPredicates, TypeScheme};
9797
use middle::ty::{Disr, ParamTy, ParameterEnvironment};
9898
use middle::ty::{LvaluePreference, NoPreference, PreferMutLvalue};
9999
use middle::ty::{self, HasTypeFlags, RegionEscape, ToPolyTraitRef, Ty};
@@ -127,7 +127,6 @@ use syntax::util::lev_distance::lev_distance;
127127
use rustc_front::intravisit::{self, Visitor};
128128
use rustc_front::hir;
129129
use rustc_front::hir::Visibility;
130-
use rustc_front::hir::{Item, ItemImpl};
131130
use rustc_front::print::pprust;
132131
use rustc_back::slice;
133132

src/librustc_typeck/check/regionck.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ use middle::mem_categorization::Categorization;
9292
use middle::region::CodeExtent;
9393
use middle::subst::Substs;
9494
use middle::traits;
95-
use middle::ty::{self, RegionEscape, ReScope, Ty, MethodCall, HasTypeFlags};
95+
use middle::ty::{self, RegionEscape, Ty, MethodCall, HasTypeFlags};
9696
use middle::infer::{self, GenericKind, InferCtxt, SubregionOrigin, TypeOrigin, VerifyBound};
9797
use middle::pat_util;
9898
use middle::ty::adjustment;

src/librustc_typeck/coherence/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ use syntax::codemap::Span;
4040
use syntax::parse::token;
4141
use util::nodemap::{DefIdMap, FnvHashMap};
4242
use rustc::front::map as hir_map;
43-
use rustc::front::map::NodeItem;
4443
use rustc_front::intravisit;
4544
use rustc_front::hir::{Item, ItemImpl,Crate};
4645
use rustc_front::hir;

src/librustc_typeck/coherence/orphan.rs

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use syntax::ast;
1919
use syntax::codemap::Span;
2020
use rustc_front::intravisit;
2121
use rustc_front::hir;
22-
use rustc_front::hir::{Item, ItemImpl};
2322

2423
pub fn check(tcx: &ty::ctxt) {
2524
let mut orphan = OrphanChecker { tcx: tcx };

src/librustc_typeck/coherence/overlap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use middle::cstore::{CrateStore, LOCAL_CRATE};
1515
use middle::def_id::DefId;
1616
use middle::traits;
1717
use middle::ty;
18-
use middle::infer::{self, new_infer_ctxt};
18+
use middle::infer;
1919
use syntax::ast;
2020
use syntax::codemap::Span;
2121
use rustc_front::hir;

0 commit comments

Comments
 (0)