71 lines
2.4 KiB
Markdown
71 lines
2.4 KiB
Markdown
# PR-05.5 - IRVM Validator Real Stack Effects for HOSTCALL and INTRINSIC
|
|
|
|
## Briefing
|
|
|
|
O validador IRVM hoje modela `HOSTCALL` e `INTRINSIC` com efeito de stack genérico insuficiente para rigor JVM-grade.
|
|
|
|
Esta PR passa a validar efeitos reais de stack por assinatura (`arg_slots`/`ret_slots`) nessas operações.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. Possíveis underflow/overflow não detectados em chamadas host/intrínseco.
|
|
2. Retorno efetivo divergente sem falha no precheck.
|
|
3. Confiança excessiva na emissão sem validação semântica de pilha completa.
|
|
|
|
## Target
|
|
|
|
`IRVMValidator` e metadados de operação com informação suficiente para calcular efeito real de stack.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-05.0.3` (IDs tipados de callable/intrinseco).
|
|
2. `PR-05.0.6` (identidade canônica de host binding).
|
|
|
|
## Scope
|
|
|
|
1. Modelo de metadados para chamadas host e intrínseco no estágio IRVM.
|
|
2. Regras de validação de stack baseadas em assinatura.
|
|
3. Diagnósticos determinísticos de mismatch.
|
|
|
|
## Non-Goals
|
|
|
|
1. Não define política de otimização.
|
|
2. Não altera opcode wire format.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Introduzir acesso a `arg_slots`/`ret_slots` efetivos durante validação de `HOSTCALL`.
|
|
2. Introduzir contrato equivalente para `INTRINSIC` (a partir de tabela canônica no pipeline).
|
|
3. Aplicar stack effect real no data-flow do validador.
|
|
4. Rejeitar mismatch de altura de retorno em joins e `RET` final.
|
|
5. Preservar mensagens de erro estáveis na taxonomia `MARSHAL_VERIFY_PRECHECK_*`.
|
|
6. Consumir metadados canônicos por ID, sem lookup textual ad-hoc.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `HOSTCALL` e `INTRINSIC` participam do cálculo real de pilha no validador.
|
|
2. Casos de mismatch de assinatura falham no precheck com erro determinístico.
|
|
3. Casos válidos seguem aprovando sem regressão.
|
|
4. O caminho de validação não depende de composição textual de chave de binding.
|
|
|
|
## Tests
|
|
|
|
1. Testes positivos com combinações de arg/ret slots para host e intrínsecos.
|
|
2. Testes negativos para underflow, overflow e retorno incompatível.
|
|
3. Testes de join mismatch com chamadas em blocos ramificados.
|
|
|
|
## Affected Documents
|
|
|
|
1. `docs/general/specs/20. IRBackend to IRVM Lowering Specification.md`
|
|
2. `docs/general/specs/19. Verification and Safety Checks Specification.md`
|
|
|
|
## Open Questions
|
|
|
|
Sem bloqueios arquiteturais.
|