Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

AvoidReinterprets: `i32.atomic.load` under `f32.reinterpret_i32` loses its atomicity

Fechada Para iniciantes
#9,185 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Um pull request relacionado já foi integrado.

  • #9228 de @tamaroning — integrado

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
76/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
wasm
Domínio
compilers

Direção de pesquisa

Comece no pass AvoidReinterprets, em makeReinterpretedLoad, e reproduza o problema com o módulo .wat fornecido usando wasm-opt --avoid-reinterprets --print. Está concluído quando um i32.atomic.load não é reescrito como um f32.load não atômico, preservando o comportamento de acesso original.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
WebAssembly
Estrelas
8.7k
Forks
900
Merge médio
2d 2h
PRs com merge (30d)
101

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de WebAssembly/binaryen

Todas as issues de WebAssembly/binaryen

Issues semelhantes

Mais issues de Compilers

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.