-
Notifications
You must be signed in to change notification settings - Fork 858
[wasm-split] Fix table naming conflicts #8708
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,45 @@ | ||
| ;; RUN: wasm-split %s -all -g -o1 %t.1.wasm -o2 %t.2.wasm --split-funcs=split | ||
| ;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY | ||
| ;; RUN: wasm-dis %t.2.wasm | filecheck %s --check-prefix SECONDARY | ||
|
|
||
| ;; Regression test for a bug when an existing table, which is to be split to the | ||
| ;; secondary module, has the name '0'. The newly created active table should | ||
| ;; have a different name. | ||
|
|
||
| (module | ||
| (table $0 0 externref) | ||
| (export "split" (func $split)) | ||
| (func $split | ||
| (table.set $0 | ||
| (i32.const 0) | ||
| (ref.null extern) | ||
| ) | ||
| ) | ||
| ) | ||
|
|
||
| ;; PRIMARY: (module | ||
| ;; PRIMARY-NEXT: (type $0 (func)) | ||
| ;; PRIMARY-NEXT: (import "placeholder.deferred" "0" (func $placeholder_0)) | ||
| ;; PRIMARY-NEXT: (table $0 1 funcref) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It looks like the new table is still called
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. #8708 (comment) |
||
| ;; PRIMARY-NEXT: (elem $0 (i32.const 0) $placeholder_0) | ||
| ;; PRIMARY-NEXT: (export "split" (func $trampoline_split)) | ||
| ;; PRIMARY-NEXT: (export "table" (table $0)) | ||
| ;; PRIMARY-NEXT: (func $trampoline_split | ||
| ;; PRIMARY-NEXT: (call_indirect (type $0) | ||
| ;; PRIMARY-NEXT: (i32.const 0) | ||
| ;; PRIMARY-NEXT: ) | ||
| ;; PRIMARY-NEXT: ) | ||
| ;; PRIMARY-NEXT: ) | ||
|
|
||
| ;; SECONDARY: (module | ||
| ;; SECONDARY-NEXT: (type $0 (func)) | ||
| ;; SECONDARY-NEXT: (import "primary" "table" (table $timport$0 1 funcref)) | ||
| ;; SECONDARY-NEXT: (table $0 0 externref) | ||
| ;; SECONDARY-NEXT: (elem $0 (table $timport$0) (i32.const 0) func $split) | ||
| ;; SECONDARY-NEXT: (func $split | ||
| ;; SECONDARY-NEXT: (table.set $0 | ||
| ;; SECONDARY-NEXT: (i32.const 0) | ||
| ;; SECONDARY-NEXT: (ref.null noextern) | ||
| ;; SECONDARY-NEXT: ) | ||
| ;; SECONDARY-NEXT: ) | ||
| ;; SECONDARY-NEXT: ) | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Table names are not actually shown in the output because its
hasExternalNameis false. But without this patch this test crashes because it tries to reuse the existing externref table in the secondary module as the active table.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are you saying that
$0is not the internal name of the table? Why are we emitting a name at all, then?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if I understand. So the input file's table name is
0:And when it tries to make an active table, we start from
0, but because it collides with the existing secondary table,getValidNameadds_0to the name, so the active table's name will be0_0.But because the table's
hasExternalNameis not set, when we write the binary, that name is not separately written to the name section. And this test expectation is printed bywasm-dis.wasm-disdoesn't have any name information on tables, so it just blindly assign numbers from 0. That's why both tables, one in the primary (newly created active table) and secondary (existingexternreftable split out) are named 0.As I said in #8708 (comment), we can make it preserved if debug option is enabled.