Fix source location of yul variable declarations without value.

This commit is contained in:
chriseth 2020-05-05 01:03:41 +02:00
parent efd2f63c2c
commit 7da453014d
3 changed files with 4 additions and 3 deletions

View File

@ -18,6 +18,7 @@ Bugfixes:
* Type Checker: Disallow accessing ``runtimeCode`` for contract types that contain immutable state variables.
* Fixed an "Assembly Exception in Bytecode" error where requested functions were generated twice.
* Natspec: Fixed a bug that ignored ``@return`` tag when no other developer-documentation tags were present.
* Yul assembler: Fix source location of variable declarations without value.
### 0.6.7 (2020-05-04)

View File

@ -184,11 +184,13 @@ void CodeTransform::operator()(VariableDeclaration const& _varDecl)
}
else
{
m_assembly.setSourceLocation(_varDecl.location);
int variablesLeft = numVariables;
while (variablesLeft--)
m_assembly.appendConstant(u256(0));
}
m_assembly.setSourceLocation(_varDecl.location);
bool atTopOfStack = true;
for (int varIndex = numVariables - 1; varIndex >= 0; --varIndex)
{
@ -203,7 +205,6 @@ void CodeTransform::operator()(VariableDeclaration const& _varDecl)
if (atTopOfStack)
{
m_context->variableStackHeights.erase(&var);
m_assembly.setSourceLocation(_varDecl.location);
m_assembly.appendInstruction(evmasm::Instruction::POP);
}
else
@ -216,7 +217,6 @@ void CodeTransform::operator()(VariableDeclaration const& _varDecl)
int slot = *m_unusedStackSlots.begin();
m_unusedStackSlots.erase(m_unusedStackSlots.begin());
m_context->variableStackHeights[&var] = slot;
m_assembly.setSourceLocation(_varDecl.location);
if (int heightDiff = variableHeightDiff(var, varName, true))
m_assembly.appendInstruction(evmasm::swapInstruction(heightDiff - 1));
m_assembly.appendInstruction(evmasm::Instruction::POP);

View File

@ -5,7 +5,7 @@ EVM assembly:
mstore(0x40, 0x80)
/* "optimizer_user_yul/input.sol":72:77 int a */
0x00
/* "optimizer_user_yul/input.sol":38:487 constructor() public payable... */
/* "optimizer_user_yul/input.sol":152:161 let x,y,z */
dup1
0x00
dup1