about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/auxiliary/static-function-pointer-aux.rs14
-rw-r--r--src/test/run-pass/static-function-pointer.rs18
2 files changed, 30 insertions, 2 deletions
diff --git a/src/test/auxiliary/static-function-pointer-aux.rs b/src/test/auxiliary/static-function-pointer-aux.rs
new file mode 100644
index 00000000000..fcf82b13605
--- /dev/null
+++ b/src/test/auxiliary/static-function-pointer-aux.rs
@@ -0,0 +1,14 @@
+// Copyright 2012 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.
+
+fn f(x: int) -> int { -x }
+
+pub static F: extern fn(int) -> int = f;
+pub static mut MutF: extern fn(int) -> int = f;
diff --git a/src/test/run-pass/static-function-pointer.rs b/src/test/run-pass/static-function-pointer.rs
index 0bb8c4e2cc3..2e29ce1ef45 100644
--- a/src/test/run-pass/static-function-pointer.rs
+++ b/src/test/run-pass/static-function-pointer.rs
@@ -8,12 +8,26 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// aux-build:static-function-pointer-aux.rs
+extern mod aux(name = "static-function-pointer-aux");
+
 fn f(x: int) -> int { x }
+fn g(x: int) -> int { 2 * x }
 
 static F: extern fn(int) -> int = f;
 static mut G: extern fn(int) -> int = f;
 
 fn main() {
-    F(42);
-    unsafe { G(7); }
+    assert_eq!(F(42), 42);
+    unsafe {
+        assert_eq!(G(42), 42);
+        G = g;
+        assert_eq!(G(42), 84);
+    }
+    assert_eq!(aux::F(42), -42);
+    unsafe {
+        assert_eq!(aux::MutF(42), -42);
+        aux::MutF = f;
+        assert_eq!(aux::MutF(42), 42);
+    }
 }