mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Warn if returndatasize/returndatacopy is used
This commit is contained in:
parent
9ff3064d03
commit
05af6c9255
@ -65,6 +65,7 @@ bool AsmAnalyzer::operator()(assembly::Instruction const& _instruction)
|
|||||||
auto const& info = instructionInfo(_instruction.instruction);
|
auto const& info = instructionInfo(_instruction.instruction);
|
||||||
m_stackHeight += info.ret - info.args;
|
m_stackHeight += info.ret - info.args;
|
||||||
m_info.stackHeightInfo[&_instruction] = m_stackHeight;
|
m_info.stackHeightInfo[&_instruction] = m_stackHeight;
|
||||||
|
warnOnFutureInstruction(_instruction.instruction, _instruction.location);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +150,7 @@ bool AsmAnalyzer::operator()(FunctionalInstruction const& _instr)
|
|||||||
if (!(*this)(_instr.instruction))
|
if (!(*this)(_instr.instruction))
|
||||||
success = false;
|
success = false;
|
||||||
m_info.stackHeightInfo[&_instr] = m_stackHeight;
|
m_info.stackHeightInfo[&_instr] = m_stackHeight;
|
||||||
|
warnOnFutureInstruction(_instr.instruction.instruction, _instr.location);
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,7 +433,6 @@ Scope& AsmAnalyzer::scope(Block const* _block)
|
|||||||
solAssert(scopePtr, "Scope requested but not present.");
|
solAssert(scopePtr, "Scope requested but not present.");
|
||||||
return *scopePtr;
|
return *scopePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _location)
|
void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _location)
|
||||||
{
|
{
|
||||||
if (!m_julia)
|
if (!m_julia)
|
||||||
@ -443,3 +444,20 @@ void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _loc
|
|||||||
"\"" + type + "\" is not a valid type (user defined types are not yet supported)."
|
"\"" + type + "\" is not a valid type (user defined types are not yet supported)."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AsmAnalyzer::warnOnFutureInstruction(solidity::Instruction _instr, SourceLocation const& _location)
|
||||||
|
{
|
||||||
|
switch (_instr)
|
||||||
|
{
|
||||||
|
case solidity::Instruction::RETURNDATASIZE:
|
||||||
|
case solidity::Instruction::RETURNDATACOPY:
|
||||||
|
m_errorReporter.warning(
|
||||||
|
_location,
|
||||||
|
"The RETURNDATASIZE/RETURNDATACOPY instructions are only available after "
|
||||||
|
"the Metropolis hard fork. Before that they act as an invalid instruction."
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -97,6 +97,7 @@ private:
|
|||||||
|
|
||||||
Scope& scope(assembly::Block const* _block);
|
Scope& scope(assembly::Block const* _block);
|
||||||
void expectValidType(std::string const& type, SourceLocation const& _location);
|
void expectValidType(std::string const& type, SourceLocation const& _location);
|
||||||
|
void warnOnFutureInstruction(solidity::Instruction _instr, SourceLocation const& _location);
|
||||||
|
|
||||||
int m_stackHeight = 0;
|
int m_stackHeight = 0;
|
||||||
julia::ExternalIdentifierAccess::Resolver m_resolver;
|
julia::ExternalIdentifierAccess::Resolver m_resolver;
|
||||||
|
Loading…
Reference in New Issue
Block a user