Ошибка при компиляции: слишком глубокий стек

При попытке компиляции я получаю следующую ошибку:

«Внутренняя ошибка компилятора: слишком глубокий стек, попробуйте удалить локальные переменные».

Есть ли способ обойти это? Я не уверен, смогу ли я удалить достаточно переменных, чтобы исправить это.

Спасибо!

17 голосов | спросил Amer Ameen 15 J0000006Europe/Moscow 2016, 10:51:20

2 ответа


11

Вы попадаете в StackTooDeepException .

Код Solidity не кажется последовательным в количестве переменных, которые он видит в качестве проблемы, но у вас есть ограничение около 16 или 17. (Хотя очевидно, что нижний предел в 16 будет тем, который ногами в ...)

CommonSubexpressionEliminator.cpp и CompilerUtils.cpp :

assertThrow(instructionNum <= 16, StackTooDeepException, "Stack too deep, try removing local variables.");

ContractCompiler.cpp :

solAssert(stackLayout.size() <= 17, "Stack too deep, try removing local variables.");

Не видя своего кода, сложно комментировать дальнейшие возможные решения, но нужно попытаться разделить большие функции на более мелкие.

ответил Richard Horrocks 15 J0000006Europe/Moscow 2016, 11:56:55
3

https://github.com/ethereum/solidity/issues/267

  

Это зависит от того, насколько сложны выражения внутри функции, но   более 16 локальных переменных не будут работать. Эта история должна исправить это,   хоть:    https://www.pivotaltracker.com/n/projects/1189488/stories/99085498

История не началась.

ответил eth 15 J0000006Europe/Moscow 2016, 11:55:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132