From 8c87eff70061040f97125cad36bb175337cac96a Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 30 Apr 2014 19:24:21 -0700 Subject: [PATCH] rustc: Fix def ids of xcrate-reexported items This was just a typo in the decoder using the source crate's number rather than the destination crate's number of a reexport. Closes #13872 --- src/librustc/metadata/decoder.rs | 2 +- src/test/auxiliary/issue-13872-1.rs | 11 +++++++++++ src/test/auxiliary/issue-13872-2.rs | 13 +++++++++++++ src/test/auxiliary/issue-13872-3.rs | 19 +++++++++++++++++++ src/test/run-pass/issue-13872.rs | 19 +++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/test/auxiliary/issue-13872-1.rs create mode 100644 src/test/auxiliary/issue-13872-2.rs create mode 100644 src/test/auxiliary/issue-13872-3.rs create mode 100644 src/test/run-pass/issue-13872.rs diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 6d5744340cc..93fc8b26e77 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -610,7 +610,7 @@ fn each_child_of_item_or_crate(intr: Rc, // Hand off the item to the callback. let def_like = item_to_def_like(child_item_doc, child_def_id, - cdata.cnum); + child_def_id.krate); // These items have a public visibility because they're part of // a public re-export. callback(def_like, token::str_to_ident(name), ast::Public); diff --git a/src/test/auxiliary/issue-13872-1.rs b/src/test/auxiliary/issue-13872-1.rs new file mode 100644 index 00000000000..941b67eb2da --- /dev/null +++ b/src/test/auxiliary/issue-13872-1.rs @@ -0,0 +1,11 @@ +// Copyright 2014 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. + +pub enum A { B } diff --git a/src/test/auxiliary/issue-13872-2.rs b/src/test/auxiliary/issue-13872-2.rs new file mode 100644 index 00000000000..ebfada18858 --- /dev/null +++ b/src/test/auxiliary/issue-13872-2.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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. + +extern crate foo = "issue-13872-1"; + +pub use foo::B; diff --git a/src/test/auxiliary/issue-13872-3.rs b/src/test/auxiliary/issue-13872-3.rs new file mode 100644 index 00000000000..7356b604a0e --- /dev/null +++ b/src/test/auxiliary/issue-13872-3.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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. + +extern crate bar = "issue-13872-2"; + +use bar::B; + +pub fn foo() { + match B { + B => {} + } +} diff --git a/src/test/run-pass/issue-13872.rs b/src/test/run-pass/issue-13872.rs new file mode 100644 index 00000000000..3c19e908e16 --- /dev/null +++ b/src/test/run-pass/issue-13872.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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. + +// aux-build:issue-13872-1.rs +// aux-build:issue-13872-2.rs +// aux-build:issue-13872-3.rs + +extern crate other = "issue-13872-3"; + +fn main() { + other::foo(); +}