Skip to content

Commit

Permalink
Be sure to GC our imports as well as the module
Browse files Browse the repository at this point in the history
After a module goes through its primary GC pass we need to look over the
set of remaining imports and use that to prune the set of imports that
we're binding.

Closes rustwasm#1613
  • Loading branch information
alexcrichton committed Jun 23, 2019
1 parent a1fc270 commit 2e03961
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
12 changes: 11 additions & 1 deletion crates/cli-support/src/js/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,18 @@ impl<'a> Context<'a> {
// After all we've done, especially
// `unexport_unused_internal_exports()`, we probably have a bunch of
// garbage in the module that's no longer necessary, so delete
// everything that we don't actually need.
// everything that we don't actually need. Afterwards make sure we don't
// try to emit bindings for now-nonexistent imports by pruning our
// `wasm_import_definitions` set.
walrus::passes::gc::run(self.module);
let remaining_imports = self
.module
.imports
.iter()
.map(|i| i.id())
.collect::<HashSet<_>>();
self.wasm_import_definitions
.retain(|id, _| remaining_imports.contains(id));

// Cause any future calls to `should_write_global` to panic, making sure
// we don't ask for items which we can no longer emit.
Expand Down
15 changes: 15 additions & 0 deletions crates/cli/tests/wasm-bindgen/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,18 @@ fn works_on_empty_project() {
}

mod npm;

#[test]
fn one_export_works() {
let (mut cmd, _out_dir) = Project::new("one_export_works")
.file(
"src/lib.rs",
r#"
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn foo() {}
"#,
)
.wasm_bindgen("");
cmd.assert().success();
}

0 comments on commit 2e03961

Please sign in to comment.