function withdraw() external { if (false) { selfdestruct(payable(owner)); } // normal withdrawal logic } The optimizer removed the if (false) branch in bytecode entirely — or so I thought. Actually, the compiler preserved a JUMPDEST but no incoming JUMP opcode.
Since "0xdeadcode" evokes low-level programming, EVM (Ethereum Virtual Machine) internals, security exploits, and perhaps a bit of rebellious cypherpunk energy, I'll write two versions: 0xdeadcode
"Dead code" isn't harmless — it’s a backdoor waiting to be activated. April 13, 2026 Then I traced the JUMPDEST
April 13, 2026
Then I traced the JUMPDEST that should be unreachable — but a storage collision could reanimate it. When you compile a Solidity contract, the optimizer
But there was a SSTORE in an admin function that allowed toggling a boolean flag — and that flag was used in another function to compute a jump offset via JUMPI . With a specific storage layout, that flag could point to the dead JUMPDEST .
When you compile a Solidity contract, the optimizer doesn't just remove unreachable paths — it buries them. But "unreachable" at compile time is not "unreachable at runtime" if the EVM state can change.