AvoidReinterprets: `i32.atomic.load` under `f32.reinterpret_i32` loses its atomicity
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- wasm
- Área
- compilers
Línea de trabajo
Comienza en el pass AvoidReinterprets, en makeReinterpretedLoad, y reproduce el problema con el módulo .wat proporcionado usando wasm-opt --avoid-reinterprets --print. Se considera terminado cuando un i32.atomic.load no se reescribe como un f32.load no atómico, preservando el comportamiento de acceso original.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
makeReinterpretedLoad rebuilds the load from bytes/offset/align/ptr/type/memory and does not carry over isAtomic.
Root cause
The rebuilt load copies the listed fields only, so the original load's isAtomic is dropped.
Copying isAtomic is not a fix, because atomic loads exist only for i32 and i64 (the validator rejects other types) and the rebuilt load has type f32. The pass should skip atomic loads.
Affected passes
Only AvoidReinterprets.
Reproducer
(module (memory 1 1)
(func (export "f") (param $p i32) (result f32)
(f32.reinterpret_i32 (i32.atomic.load (local.get $p)))))
$ wasm-opt in.wat -all --avoid-reinterprets --print
(func $0 (type $0) (param $p i32) (result f32)
(f32.load
(local.get $p)
)
)
The i32.atomic.load has become a plain f32.load.
Expected vs actual
An unaligned address that traps for the atomic access no longer traps, and on a shared memory the access is no longer atomic.
Version
Reproduced on upstream main at 4d8ac549e2ab9b283246ea95e79ebe139ca579ac (wasm-opt version 133).
AI was used as part of the process of finding this issue. I have manually checked and reproduced it.
- Lenguaje dominante
- WebAssembly
- Estrellas
- 8.7k
- Forks
- 893
- Merge medio
- 1 d 11 h
- PR fusionados (30 d)
- 74
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 58/100
WebAssembly/binaryen#9210 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
WebAssembly/binaryen#9186 ·
Los mantenedores suelen responder en 1 día
-
LoopInvariantCodeMotion: `struct.new` is hoisted out of a loop, so all iterations share one objectAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
WebAssembly/binaryen#9184 ·
Los mantenedores suelen responder en 1 día
Todos los issues de WebAssembly/binaryen
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
rubys/roundhouse#444 ·
Los mantenedores suelen responder en 1 día
-
vxc prints a debug line '[flat-codegen] emitted module via the flat path' on every compilePosiblemente ocupada @YodHeVauHe la tomó hoy. Abiertodevex good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
kmmbvnr/rank#196 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
SciML/ModelingToolkit.jl#5255 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
NVIDIA/cuda-quantum#5539 ·
Los mantenedores suelen responder en 1 día