diff options
author | chriseth <c@ethdev.com> | 2015-08-19 01:41:47 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-08-19 03:22:43 +0800 |
commit | 34986ee4fcbea4d4f3609d9227864b640f021ffa (patch) | |
tree | 282fc2193a37c2269698e2689a5fc92fd90ce3da /CommonSubexpressionEliminator.cpp | |
parent | 8fbecb9c27a457f4704f5b354cf780808b8948ab (diff) | |
download | dexon-solidity-34986ee4fcbea4d4f3609d9227864b640f021ffa.tar.gz dexon-solidity-34986ee4fcbea4d4f3609d9227864b640f021ffa.tar.zst dexon-solidity-34986ee4fcbea4d4f3609d9227864b640f021ffa.zip |
Detect unavailable items and do not optimise the chunk in that case.
Diffstat (limited to 'CommonSubexpressionEliminator.cpp')
-rw-r--r-- | CommonSubexpressionEliminator.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/CommonSubexpressionEliminator.cpp b/CommonSubexpressionEliminator.cpp index 8fb4625a..6c095595 100644 --- a/CommonSubexpressionEliminator.cpp +++ b/CommonSubexpressionEliminator.cpp @@ -220,6 +220,12 @@ void CSECodeGenerator::addDependencies(Id _c) if (m_neededBy.count(_c)) return; // we already computed the dependencies for _c ExpressionClasses::Expression expr = m_expressionClasses.representative(_c); + if (expr.item->type() == UndefinedItem) + BOOST_THROW_EXCEPTION( + // If this exception happens, we need to find a different way to generate the + // compound expression. + ItemNotAvailableException() << errinfo_comment("Undefined item requested but not available.") + ); for (Id argument: expr.arguments) { addDependencies(argument); @@ -317,6 +323,11 @@ void CSECodeGenerator::generateClassElement(Id _c, bool _allowSequenced) "Sequence constrained operation requested out of sequence." ); assertThrow(expr.item, OptimizerException, "Non-generated expression without item."); + assertThrow( + expr.item->type() != UndefinedItem, + OptimizerException, + "Undefined item requested but not available." + ); vector<Id> const& arguments = expr.arguments; for (Id arg: boost::adaptors::reverse(arguments)) generateClassElement(arg); |