Fix internal error in assignment chains that also assign to fully qualified state variables (, for example), where the contract expression is a tuble.

This commit is contained in:
Leo Alt
2022-11-28 18:45:50 +01:00
parent 764569be16
commit 07870d0318
5 changed files with 49 additions and 1 deletions
+3 -1
View File
@@ -2757,7 +2757,9 @@ VariableDeclaration const* SMTEncoder::identifierToVariable(Expression const& _e
}
// But we are interested in "contract.var", because that is the same as just "var".
if (auto const* memberAccess = dynamic_cast<MemberAccess const*>(&_expr))
if (dynamic_cast<ContractDefinition const*>(expressionToDeclaration(memberAccess->expression())))
if (dynamic_cast<ContractDefinition const*>(expressionToDeclaration(
*cleanExpression(memberAccess->expression())
)))
if (auto const* varDecl = dynamic_cast<VariableDeclaration const*>(memberAccess->annotation().referencedDeclaration))
{
solAssert(m_context.knownVariable(*varDecl), "");