Merge pull request #4326 from ethereum/compilerstack-cleanup

Properly catch optimizer/assembly exception in CompilerStack
This commit is contained in:
chriseth 2018-06-21 14:14:13 +02:00 committed by GitHub
commit 2c456f0e70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -741,16 +741,20 @@ void CompilerStack::compileContract(
// 16-bit big endian length
cborEncodedMetadata += toCompactBigEndian(cborEncodedMetadata.size(), 2);
// Run optimiser and compile the contract.
compiler->compileContract(_contract, _compiledContracts, cborEncodedMetadata);
try
{
compiledContract.object = compiler->assembledObject();
// Run optimiser and compile the contract.
compiler->compileContract(_contract, _compiledContracts, cborEncodedMetadata);
}
catch(eth::OptimizerException const&)
{
solAssert(false, "Assembly optimizer exception for bytecode");
solAssert(false, "Optimizer exception during compilation");
}
try
{
// Assemble deployment (incl. runtime) object.
compiledContract.object = compiler->assembledObject();
}
catch(eth::AssemblyException const&)
{
@ -759,12 +763,9 @@ void CompilerStack::compileContract(
try
{
// Assemble runtime object.
compiledContract.runtimeObject = compiler->runtimeObject();
}
catch(eth::OptimizerException const&)
{
solAssert(false, "Assembly optimizer exception for deployed bytecode");
}
catch(eth::AssemblyException const&)
{
solAssert(false, "Assembly exception for deployed bytecode");