summaryrefslogtreecommitdiffstats
path: root/src/test/run-make/wasm-symbols-not-exported
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/run-make/wasm-symbols-not-exported')
-rw-r--r--src/test/run-make/wasm-symbols-not-exported/Makefile13
-rw-r--r--src/test/run-make/wasm-symbols-not-exported/bar.rs35
-rw-r--r--src/test/run-make/wasm-symbols-not-exported/foo.rs7
-rw-r--r--src/test/run-make/wasm-symbols-not-exported/verify-exported-symbols.js21
4 files changed, 76 insertions, 0 deletions
diff --git a/src/test/run-make/wasm-symbols-not-exported/Makefile b/src/test/run-make/wasm-symbols-not-exported/Makefile
new file mode 100644
index 000000000..62bd0f087
--- /dev/null
+++ b/src/test/run-make/wasm-symbols-not-exported/Makefile
@@ -0,0 +1,13 @@
+-include ../../run-make-fulldeps/tools.mk
+
+# only-wasm32-bare
+
+all:
+ $(RUSTC) foo.rs --target wasm32-unknown-unknown
+ $(NODE) verify-exported-symbols.js $(TMPDIR)/foo.wasm
+ $(RUSTC) foo.rs --target wasm32-unknown-unknown -O
+ $(NODE) verify-exported-symbols.js $(TMPDIR)/foo.wasm
+ $(RUSTC) bar.rs --target wasm32-unknown-unknown
+ $(NODE) verify-exported-symbols.js $(TMPDIR)/bar.wasm
+ $(RUSTC) bar.rs --target wasm32-unknown-unknown -O
+ $(NODE) verify-exported-symbols.js $(TMPDIR)/bar.wasm
diff --git a/src/test/run-make/wasm-symbols-not-exported/bar.rs b/src/test/run-make/wasm-symbols-not-exported/bar.rs
new file mode 100644
index 000000000..6ffbd3ec6
--- /dev/null
+++ b/src/test/run-make/wasm-symbols-not-exported/bar.rs
@@ -0,0 +1,35 @@
+#![feature(panic_handler, alloc_error_handler)]
+#![crate_type = "cdylib"]
+#![no_std]
+
+use core::alloc::*;
+
+struct B;
+
+unsafe impl GlobalAlloc for B {
+ unsafe fn alloc(&self, x: Layout) -> *mut u8 {
+ 1 as *mut u8
+ }
+
+ unsafe fn dealloc(&self, ptr: *mut u8, x: Layout) {
+ }
+}
+
+#[global_allocator]
+static A: B = B;
+
+#[no_mangle]
+pub extern fn foo(a: u32) -> u32 {
+ assert_eq!(a, 3);
+ a * 2
+}
+
+#[alloc_error_handler]
+fn a(_: core::alloc::Layout) -> ! {
+ loop {}
+}
+
+#[panic_handler]
+fn b(_: &core::panic::PanicInfo) -> ! {
+ loop {}
+}
diff --git a/src/test/run-make/wasm-symbols-not-exported/foo.rs b/src/test/run-make/wasm-symbols-not-exported/foo.rs
new file mode 100644
index 000000000..d46baee01
--- /dev/null
+++ b/src/test/run-make/wasm-symbols-not-exported/foo.rs
@@ -0,0 +1,7 @@
+#![crate_type = "cdylib"]
+
+#[no_mangle]
+pub extern fn foo() {
+ println!("foo");
+ panic!("test");
+}
diff --git a/src/test/run-make/wasm-symbols-not-exported/verify-exported-symbols.js b/src/test/run-make/wasm-symbols-not-exported/verify-exported-symbols.js
new file mode 100644
index 000000000..afc8a7241
--- /dev/null
+++ b/src/test/run-make/wasm-symbols-not-exported/verify-exported-symbols.js
@@ -0,0 +1,21 @@
+const fs = require('fs');
+const process = require('process');
+const assert = require('assert');
+const buffer = fs.readFileSync(process.argv[2]);
+
+let m = new WebAssembly.Module(buffer);
+let list = WebAssembly.Module.exports(m);
+console.log('exports', list);
+
+let bad = false;
+for (let i = 0; i < list.length; i++) {
+ const e = list[i];
+ if (e.name == "foo" || e.kind != "function")
+ continue;
+
+ console.log('unexpected exported symbol:', e.name);
+ bad = true;
+}
+
+if (bad)
+ process.exit(1);