From f45cd01ea2fd02fdaa07ed7dead6a280a13d7597 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Thu, 16 Apr 2026 14:45:02 +0800 Subject: [PATCH] cmd/evm: compare errors by value in timedExec instead of interface identity timedExec compares errors by direct interface inequality (haveErr != err). If execFunc returns newly constructed errors with the same message each run, this will panic even though behavior is equivalent. --- cmd/evm/runner.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index ebb3e04461..82e7bdff3d 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -166,8 +166,11 @@ func timedExec(bench bool, execFunc func() ([]byte, uint64, error)) ([]byte, exe if haveGasUsed != gasUsed { panic(fmt.Sprintf("gas differs, have %v want %v", haveGasUsed, gasUsed)) } - if haveErr != err { - panic(fmt.Sprintf("err differs, have %v want %v", haveErr, err)) + if (haveErr == nil) != (err == nil) { + panic(fmt.Sprintf("err differs in nil-ness, have %v want %v", haveErr, err)) + } + if haveErr != nil && err != nil && haveErr.Error() != err.Error() { + panic(fmt.Sprintf("err differs, have %q want %q", haveErr.Error(), err.Error())) } } })