Это понятно, поскольку генерация мутантов часто основана на проверке конкретного внутреннего представления, созданного конкретной структурой компилятора. Некоторые инструменты даже применяют изменяющие преобразования непосредственно к промежуточному представлению, не возвращая их обратно на уровень исходного кода.
Однако бывают ситуации, когда использование любого компилятора является нецелесообразным. невозможно, и необходимо использовать специальную цепочку инструментов. Несколько примеров:
- В проекте использовались расширения, специфичные для компилятора. И GCC, и MSVC имеют дополнения, которые отклонены Clang. Среди них множество встроенных функций, различные __attribute__, закрепление регистров с помощью Register asm, встроенный ассемблер в целом, структурированные исключения и т. д.
- Проект построен с использованием флагов компиляции не понимается Clang, например, -Wsuggest-override и многие другие.
- Целевая платформа не поддерживается серверной частью Clang.
- Проект опирается на правильное, но определяемое реализацией поведение, которое различается в зависимости от компилятора.
- Язык, используемый в программе, не является строго C, но его синтаксис очень близок к C.
br />
Конечно, ему придется быть более консервативным в том, какие преобразования он может применить, чтобы сохранить мутанты в порядке. сформированы (т.е. синтаксически корректны и конструктивны). Но еще многое можно сделать.
Есть ли примеры, когда это сработает?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -languages
Мобильная версия