Skip to content

PANIC triggered by simple assembly require function #364

Description

@axic

The line https://github.com/axic/solcore/blob/a14a61491592a710ea588050dd982ff9e816ac87/test/examples/dispatch/deposit.solc#L240 triggers this PANIC:

$ ./contest.sh test/examples/dispatch/deposit.json 
Processing: test/examples/dispatch/deposit.json
Compiling to Hull...
PANIC: spec(require<sum((), ()) -> $420408>(ne<uint256 -> uint256 -> sum((), ())>(callvalue<uint256>(), uint256<word -> uint256>(0)))): free type vars in sum((), ()) -> $420408: [TVar {var = $420408}] @ subst={$265579 |-> $420408, a |-> uint256, decodable |-> calldata(bytes), ty |-> (memory(string), (memory(string), (memory(string), uint256))), reader |-> CalldataWordReader, decoded |-> (memory(string), (memory(string), (memory(string), uint256))), b |-> (memory(string), (memory(string), uint256)), _s1 |-> NonPayable, _q1 |-> (memory(string), (memory(string), (memory(string), uint256))), _r1 |-> (), _p1 |-> t_deposit421831, name |-> DispatchNameTy_DepositContract_deposit, n |-> Method(DispatchNameTy_DepositContract_deposit, NonPayable, (memory(string), (memory(string), (memory(string), uint256))), (), t_deposit421831), m |-> Method(DispatchNameTy_DepositContract_supportsInterface, NonPayable, uint256, sum((), ()), t_supportsInterface292600), methods |-> (Method(DispatchNameTy_DepositContract_get_zero_hash, NonPayable, uint256, uint256, t_get_zero_hash410559), (Method(DispatchNameTy_DepositContract_get_deposit_root, NonPayable, (), uint256, t_get_deposit_root413685), (Method(DispatchNameTy_DepositContract_get_deposit_count, NonPayable, (), memory(string), t_get_deposit_count418663), (Method(DispatchNameTy_DepositContract_deposit, NonPayable, (memory(string), (memory(string), (memory(string), uint256))), (), t_deposit421831), Method(DispatchNameTy_DepositContract_supportsInterface, NonPayable, uint256, sum((), ()), t_supportsInterface292600))))), fallback |-> Fallback(NonPayable, (), (), t_revert_handler260167)}
Error: sol-core compilation failed

Removing that line allows for compilation. Prior to this a more complex require implementation (the one from ownable.solc) worked. Commenting out the assembly block in require makes it compile.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions