Skip to content

cross-check が正しいP4結果を壊れたlegacyで上書きする (variadic min/max・boolean優先順位・関数項脱落) #21

Description

@opaopa6969

症状

AstEvaluatorCalculator は数値結果を legacy token-AST 評価器と照合し、不一致時に legacy を信頼する。しかし legacy は複数のバグを抱えており、正しい P4-typed 結果を誤った legacy 値で上書きしてしまう。

再現(AST_EVALUATOR backend, KnownP4BugsTest@ignore で収録):

P4-typed(正) legacy(誤) 返却値
min(3,5,1,9) 1 3 3
max(3,5,1,9) 9 5 5
if(1>0 | 0>1 & 1>2){1}else{0} 1 0 0
abs(-3)+pow(2,3) 11 3 3

ログ: P4-typed path did not handle formula ... reason=cross-check mismatch: p4=1.0 vs token=3.0

根本原因

  • legacy 側の欠陥: variadic min/max が3引数以上を無視、boolean がフラット左結合(優先順位無し)、関数項を含む算術で項が脱落。
  • cross-check が「legacy = 正」前提で、不一致時に正しい P4 結果を破棄する。

修正案

手書き legacy を廃する方針なら cross-check を撤去、または不一致時に P4 を信頼する(legacy のバグに引きずられない)。ただし P4 マッパー側のバグ(別issue)も残るため、それらの修正と同時に行うのが安全。全数値式の挙動を変えるため、変更後は全スイートで回帰確認。

参照

docs/findings-2026-06-15-unlaxer-3.0.4-and-p4.md §6 (P4-BUG-3/4/5), KnownP4BugsTest

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions