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