Исключение при запуске пользовательского инструмента внешнего интерфейса для некоторых входных файлов.

Я написал пользовательский инструмент внешнего интерфейса 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 позволило избежать исключения переполнения стека.

Похожий случай с глубиной шаблона.

Другие вопросы по тегам