Исключение при запуске пользовательского инструмента внешнего интерфейса для некоторых входных файлов.
Я написал пользовательский инструмент внешнего интерфейса Clang по следующей ссылке. http://clang.llvm.org/docs/RAVFrontendAction.html
Теперь я даю исходный код Clang самому своему инструменту внешнего интерфейса для статического анализа. Мой инструмент выбрасывает исключение для этого теста https://llvm.org/svn/llvm-project/cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp
Из документации этого теста написано для неопределенного поведения. И при запуске ClangTool в этом тесте он генерирует исключение stackru даже до того, как элемент управления появится в HandleTranslationUnit.
Поскольку clang может генерировать AST для приведенного выше теста, я предполагаю, что исключение может произойти во время компиляции. Теперь вопрос заключается в том, могу ли я продолжать посещать узлы AST для таких файлов, так как меня не волнует семантика входных исходных файлов. Меня интересует только статический анализ.
Это ожидаемое поведение? Тогда как пройти через сгенерированный AST и посетить узлы. Я действительно застрял в этот момент и понятия не имею, как поступить. Не могли бы вы помочь мне решить эту проблему.
Заранее спасибо!
Спасибо, Хемант Бхагат
1 ответ
Я нашел ответ. Существует проблема с глубиной рекурсии системы. В Windows предельное значение глубины рекурсии по умолчанию составляет 512. Таким образом, в случае тестового примера, упомянутого в вопросе, стек переполняется даже до достижения предела рекурсии. Следовательно, уменьшение предела глубины рекурсии до 27 позволило избежать исключения переполнения стека.
Похожий случай с глубиной шаблона.