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);
|
||||
m_stackHeight += info.ret - info.args;
|
||||
m_info.stackHeightInfo[&_instruction] = m_stackHeight;
|
||||
warnOnFutureInstruction(_instruction.instruction, _instruction.location);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -149,6 +150,7 @@ bool AsmAnalyzer::operator()(FunctionalInstruction const& _instr)
|
||||
if (!(*this)(_instr.instruction))
|
||||
success = false;
|
||||
m_info.stackHeightInfo[&_instr] = m_stackHeight;
|
||||
warnOnFutureInstruction(_instr.instruction.instruction, _instr.location);
|
||||
return success;
|
||||
}
|
||||
|
||||
@ -431,7 +433,6 @@ Scope& AsmAnalyzer::scope(Block const* _block)
|
||||
solAssert(scopePtr, "Scope requested but not present.");
|
||||
return *scopePtr;
|
||||
}
|
||||
|
||||
void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _location)
|
||||
{
|
||||
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)."
|
||||
);
|
||||
}
|
||||
|
||||
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);
|
||||
void expectValidType(std::string const& type, SourceLocation const& _location);
|
||||
void warnOnFutureInstruction(solidity::Instruction _instr, SourceLocation const& _location);
|
||||
|
||||
int m_stackHeight = 0;
|
||||
julia::ExternalIdentifierAccess::Resolver m_resolver;
|
||||
|
Loading…
Reference in New Issue
Block a user