Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Cranelift: inliner remaps dynamic types with the dynamic-stack-slot offset

Cerrado Apto para principiantes
#14,569 1 comentario 0 reacciones 0 asignados Ver en GitHub

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
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
compilers

Línea de trabajo

Comienza en cranelift/codegen/src/inline.rs en create_dynamic_types, donde el offset se deriva de func.dynamic_stack_slots.len() en lugar de func.dfg.dynamic_types.len(); lee cómo se emparejan los slots inlineados y los tipos dinámicos para confirmar el índice correcto. Reproduce el caso .clif con clif-util test (cargo run -p clif-util). Listo cuando la línea ; check: coincida y Context::compile ya no entre en pánico con Undeclared dynamic vector type; los filetests en cranelift/filetests cubren test inline.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug cranelift

create_dynamic_types in cranelift/codegen/src/inline.rs computes its
offset from func.dynamic_stack_slots.len(), but it should use
func.dfg.dynamic_types.len(). Whenever the caller has a different number
of dynamic stack slots than dynamic types, inlined slots name the wrong
dynamic type. The verifier accepts the result, and then:

  • Context::compile panics with Undeclared dynamic vector type, if the
    index is out of range; or
  • the inlined slot silently gets one of the caller's unrelated types.
.clif Test Case
test inline
target aarch64

function %callee(i32) {
    gv0 = dyn_scale_target_const.i32x4
    dt0 = i32x4*gv0
    dss0 = explicit_dynamic_slot dt0
block0(v0: i32):
    v1 = splat.dt0 v0
    v2 = dynamic_stack_addr.i64 dss0
    store.dt0 notrap aligned v1, v2
    return
}

function %caller() {
    gv0 = dyn_scale_target_const.i64x2
    dt0 = i64x2*gv0
    dss0 = explicit_dynamic_slot dt0
    dss1 = explicit_dynamic_slot dt0
    fn0 = %callee(i32)
block0:
    v0 = iconst.i32 1
    call fn0(v0)
    return
}
; check: dss2 = explicit_dynamic_slot dt1
Steps to Reproduce
clif-util test test.clif
Expected Results

The inlined slot uses the copied callee type:
dss2 = explicit_dynamic_slot dt1.

Actual Results
    Missed #0: \bdss2 = explicit_dynamic_slot dt1\b
    >     dss2 = explicit_dynamic_slot dt2

The caller has no dt2. Compiling the inlined function panics with
Undeclared dynamic vector type: dt2.

Versions and Environment

Cranelift version or commit: 73b04cff33

Operating system: macOS 15.8.1

Architecture: aarch64

Lenguaje dominante
Rust
Estrellas
18.7k
Forks
1.9k
Merge medio
20 h 40 min
PR fusionados (30 d)
366

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bytecodealliance/wasmtime

Todos los issues de bytecodealliance/wasmtime

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.