about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-10-12 10:15:26 -0700
committerAlex Crichton <alex@alexcrichton.com>2016-10-12 14:07:55 -0700
commit65fc3ef1f4eeefbde4fd2592f1907c922181bfa8 (patch)
tree7d3dc5f0e542ea52f694064c027675c823b7cf97 /src
parent9d70ff384f4a87e2cfe3d5e90b27637632bb373a (diff)
parent4080efd274f99ed0f6ee610086c5dce5a6168954 (diff)
downloadrust-65fc3ef1f4eeefbde4fd2592f1907c922181bfa8.tar.gz
rust-65fc3ef1f4eeefbde4fd2592f1907c922181bfa8.zip
Rollup merge of #37023 - jseyfried:fix_extern_crate_back_compat, r=nrc
Fix importing inaccessible `extern crate`s (with a warning)

Fixes #36747, fixes #37020, and fixes #37021.
r? @nrc
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/resolve_imports.rs3
-rw-r--r--src/test/run-pass/issue-37020.rs25
2 files changed, 27 insertions, 1 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 4689c4ded5c..e33668b6fe9 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -197,7 +197,8 @@ impl<'a> Resolver<'a> {
         // If the resolution doesn't depend on glob definability, check privacy and return.
         if let Some(result) = self.try_result(&resolution, ns) {
             return result.and_then(|binding| {
-                if self.is_accessible(binding.vis) && !is_disallowed_private_import(binding) {
+                if self.is_accessible(binding.vis) && !is_disallowed_private_import(binding) ||
+                   binding.is_extern_crate() { // c.f. issue #37020
                     Success(binding)
                 } else {
                     Failed(None)
diff --git a/src/test/run-pass/issue-37020.rs b/src/test/run-pass/issue-37020.rs
new file mode 100644
index 00000000000..7d0d20269ab
--- /dev/null
+++ b/src/test/run-pass/issue-37020.rs
@@ -0,0 +1,25 @@
+// Copyright 2016 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.
+
+#![allow(private_in_public)]
+
+mod foo {
+    pub mod bar {
+        extern crate core;
+    }
+}
+
+mod baz {
+    pub use foo::bar::core;
+}
+
+fn main() {
+    baz::core::cell::Cell::new(0u32);
+}