Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Chiusa Adatta ai principianti
#14,569 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
rust
Ambito
compilers

Direzione di ricerca

Parti da cranelift/codegen/src/inline.rs a create_dynamic_types, dove l'offset è ricavato da func.dynamic_stack_slots.len() invece che da func.dfg.dynamic_types.len(); leggi come gli slot inlineati e i tipi dinamici vengono accoppiati per confermare l'indice corretto. Riproduci il caso .clif con clif-util test (cargo run -p clif-util). Concluso quando la riga ; check: corrisponde e Context::compile non va più in panic con Undeclared dynamic vector type; i filetests sotto cranelift/filetests coprono test inline.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
Rust
Stelle
18.7k
Fork
1.9k
Merge medio
21h 44m
PR unite (30g)
300

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di bytecodealliance/wasmtime

Tutte le issue di bytecodealliance/wasmtime

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.