mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[SMTChecker] Fix in abi handling - tuple expression of size 1 has the type of the member and not TupleType
This commit is contained in:
parent
b4d2a71eec
commit
504e4c22b2
@ -203,15 +203,20 @@ void SymbolicState::buildABIFunctions(set<FunctionCall const*> const& _abiFuncti
|
|||||||
if (t->kind() == FunctionType::Kind::ABIDecode)
|
if (t->kind() == FunctionType::Kind::ABIDecode)
|
||||||
{
|
{
|
||||||
/// abi.decode : (bytes, tuple_of_types(return_types)) -> (return_types)
|
/// abi.decode : (bytes, tuple_of_types(return_types)) -> (return_types)
|
||||||
|
solAssert(args.size() == 2, "Unexpected number of arguments for abi.decode");
|
||||||
inTypes.emplace_back(TypeProvider::bytesMemory());
|
inTypes.emplace_back(TypeProvider::bytesMemory());
|
||||||
auto const* tupleType = dynamic_cast<TupleType const*>(args.at(1)->annotation().type);
|
auto argType = args.at(1)->annotation().type;
|
||||||
solAssert(tupleType, "");
|
if (auto const* tupleType = dynamic_cast<TupleType const*>(argType))
|
||||||
for (auto t: tupleType->components())
|
for (auto componentType: tupleType->components())
|
||||||
{
|
{
|
||||||
auto typeType = dynamic_cast<TypeType const*>(t);
|
auto typeType = dynamic_cast<TypeType const*>(componentType);
|
||||||
solAssert(typeType, "");
|
solAssert(typeType, "");
|
||||||
|
outTypes.emplace_back(typeType->actualType());
|
||||||
|
}
|
||||||
|
else if (auto const* typeType = dynamic_cast<TypeType const*>(argType))
|
||||||
outTypes.emplace_back(typeType->actualType());
|
outTypes.emplace_back(typeType->actualType());
|
||||||
}
|
else
|
||||||
|
solAssert(false, "Unexpected argument of abi.decode");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user