RemoveUnusedModuleElements drops an active elem segment whose items are global.get, so call_indirect traps
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
Línea de trabajo
Start in src/passes/RemoveUnusedModuleElements.cpp, especially Analyzer::prepare() and notePossibleFunc; the issue identifies the RefFunc-only check and the missing global.get handling. Read the existing pass tests for element segments and add a regression case based on the supplied WAT module. Done means the segment and referenced global are retained as needed, and optimized execution still returns 42 instead of trapping.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
An active element segment whose item is global.get (the "Initializing a table with imported funcref global" case in the spec's elem.wast) is removed by --remove-unused-module-elements and at -O1 and above. The table slot stays null and call_indirect traps.
;; b2.wat
(module
(type $f (func (result i32)))
(import "env" "g" (global $g funcref))
(table 1 funcref)
(elem (i32.const 0) funcref (global.get $g))
(func (export "call") (result i32)
(call_indirect (type $f) (i32.const 0))))
wasm-opt b2.wat --enable-reference-types --remove-unused-module-elements -S -o - prints:
(module
(type $f (func (result i32)))
(table $0 1 funcref)
(export "call" (func $0))
(func $0 (result i32)
(call_indirect $0 (type $f)
(i32.const 0)
)
)
)
The segment and the import are gone. Instantiated in Node.js 26.13.0 with env.g set to a function returning 42:
unoptimized: call() = 42
--remove-unused-module-elements: RuntimeError: function signature mismatch
-O1: RuntimeError: unreachable
The same happens when $g is a defined global initialized with ref.func (with --enable-gc).
Tested with wasm-opt version_133; on main (95a214dc48) the pass differs from version_133 only by the NFC renames in #9286/#9288.
In src/passes/RemoveUnusedModuleElements.cpp, notePossibleFunc in Analyzer::prepare() only looks at item->dynCast<RefFunc>(), so a segment with global.get items never gets into FlatTableInfo::typeElems and is considered unused.
Found with a differential-testing tool; the report was drafted with AI assistance and reviewed and edited by me.
Credit: https://ucsbplse.github.io/
- Lenguaje dominante
- WebAssembly
- Estrellas
- 8.7k
- Forks
- 905
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 86
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de WebAssembly/binaryen
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
WebAssembly/binaryen#9135 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 Medio día Aptitud para principiantes 76/100
WebAssembly/binaryen#9018 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
WebAssembly/binaryen#9365 ·
Los mantenedores suelen responder en 1 día
-
Add a pass to relax nullabilities of definitionsPosiblemente ocupada @stevenfontanella la tomó hace 2 días. Abierto
WebAssembly/binaryen#9352 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
WebAssembly/binaryen#9307 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de WebAssembly/binaryen
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
tree-sitter/tree-sitter-cpp#381 ·
-
[P2] Interpreter: Array.prototype.findLastIndex starts at the wrong index for long array-likesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
new issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
llvm/llvm-project#240065 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
CanadaHonk/porffor#452 ·