about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-05-31 11:31:38 -0700
committerPatrick Walton <pcwalton@mimiga.net>2013-06-01 09:16:46 -0700
commit1e52eede31a1df3627bfa9f43b9d06c730895c01 (patch)
treea2c6e5465401fa41ffa1ceb2930eee391067d97d /src
parentb8391ccea0b2e2718a4d4ef999e9f03583c7ddea (diff)
downloadrust-1e52eede31a1df3627bfa9f43b9d06c730895c01.tar.gz
rust-1e52eede31a1df3627bfa9f43b9d06c730895c01.zip
librustc: Don't require `pub extern` to make extern functions visible
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/privacy.rs2
-rw-r--r--src/test/run-pass/pub-extern-privacy.rs14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs
index 5f88c25653d..0f00e9d596e 100644
--- a/src/librustc/middle/privacy.rs
+++ b/src/librustc/middle/privacy.rs
@@ -200,7 +200,7 @@ pub fn check_crate(tcx: ty::ctxt,
         f = |item_id| {
             match tcx.items.find(&item_id) {
                 Some(&node_item(item, _)) => item.vis != public,
-                Some(&node_foreign_item(_, _, vis, _)) => vis != public,
+                Some(&node_foreign_item(*)) => false,
                 Some(&node_method(method, impl_did, _)) => {
                     match method.vis {
                         private => true,
diff --git a/src/test/run-pass/pub-extern-privacy.rs b/src/test/run-pass/pub-extern-privacy.rs
new file mode 100644
index 00000000000..2927279f6a2
--- /dev/null
+++ b/src/test/run-pass/pub-extern-privacy.rs
@@ -0,0 +1,14 @@
+use std::cast::transmute;
+
+mod a {
+    extern {
+        pub fn free(x: *u8);
+    }
+}
+
+fn main() {
+    unsafe {
+        a::free(transmute(0));
+    }
+}
+