trufflesuite / truffle

:warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over the years.
https://consensys.io/blog/consensys-announces-the-sunset-of-truffle-and-ganache-and-new-hardhat?utm_source=github&utm_medium=referral&utm_campaign=2023_Sep_truffle-sunset-2023_announcement_
MIT License
14.02k stars 2.32k forks source link

Debugger shows incorrect value for a Yul variable #6157

Open cds-amal opened 1 year ago

cds-amal commented 1 year ago

While evaluating #6154 I noticed this strange behavior where the expected value for a variable should be 0, but we get 1.

Steps to Reproduce

  1. Clone this Repo
  2. truffle develop
  3. truffle(develop) migrate
    D = await DelegateTestYulString.deployed()
    await D.setValue("Hello")
    // grab transaction hash
  4. In a separate terminal console:
    truffle debug --url http://127.0.0.1:9545 txhash
    b YulString.yul:179
    c
    :v
    # expect 0, but got 1

Environment

haltman-at commented 1 year ago

Hm, yeah, looks like the debugger is getting wrong the stack slots for Yul return variables. Will have to see just what's going on there. Oy, like that code isn't hairy enough already...!

haltman-at commented 1 year ago

Hm, this is very annoying. It looks like the problem is due to the optimizer -- it'll run on straight Yul code where it wouldn't on a Solidity assembly block. Even if you set enabled: false, even if you set yul: false, it'll still do it. The only way I found to turn it off was to set yul: true (!), and then use yulDetails to turn everything off. Once you do that, things work fine. :-/

Since it's due to the optimizer, I'm not sure if I can do much about this; but it's very annoying because, like, the optimizer is basically going to always be on in this case! Ugh...

haltman-at commented 1 year ago

(Maybe should file an issue with Solidity about this...? Or at least go ask them about it...)

cds-amal commented 1 year ago

(Maybe should file an issue with Solidity about this...? Or at least go ask them about it...)

Seems like a good idea to raise it with them. Can you do that please?