prometeu-studio/docs/pbs/pull-requests/PR-05.5-irvm-validator-real-stack-effects-hostcall-intrinsic.md
2026-03-24 13:42:29 +00:00

2.4 KiB

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.