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

Я написал собственный инструмент Clang Frontend по следующей ссылке. 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 в этом тесте выдается исключение stackoverflow еще до того, как элемент управления поступает в HandleTranslationUnit.

Поскольку clang может генерировать AST для приведенного выше теста, я предполагаю, что исключение может возникнуть во время компиляции. Теперь вопрос в том, могу ли я продолжать посещать узлы AST для таких файлов, поскольку меня не волнует семантика входных исходных файлов. Меня интересует только статический анализ.

Это ожидаемое поведение? Затем, как пройти сгенерированный AST и посетить узлы. Я действительно застрял в этот момент и понятия не имею, как действовать дальше. Не могли бы вы помочь мне решить эту проблему.

Заранее спасибо!

Спасибо, Хемант Бхагат.


person Hemant    schedule 27.02.2017    source источник


Ответы (1)


Я нашел ответ. Проблема с глубиной рекурсии системы. В Windows ограничение глубины рекурсии по умолчанию составляет 512. Таким образом, в случае упомянутого тестового примера стек переполняется еще до достижения предела рекурсии. Следовательно, уменьшение предела глубины рекурсии до 27 позволяет избежать исключения переполнения стека.

То же самое и с глубиной шаблона.

person Hemant    schedule 28.02.2017