Я не очень знаком с LLVM, но я немного более знаком с GCC (и его механизмом плагинов), так как я являюсь основным автором GCC MELT (высокоуровневый домен-специфический языкрасширить GCC, который, кстати, вы могли бы использовать для вашей проблемы).Поэтому я постараюсь ответить в общих чертах.
Сначала вы должны знать, почему вы хотите адаптировать компилятор (или статический анализатор).Это стоящая цель, но у нее есть недостатки (в частности, не нужно переопределять некоторые операторы или другие конструкции в вашей программе на C ++).
Основной момент при расширении компилятора (будь то GCC или LLVM или что-то еще)) вы, вероятно, должны обрабатывать все его внутреннее представление (и вы, вероятно, не сможете пропустить его части, если у вас нет очень узко определенной проблемы).Для GCC это означает обработку более 100 видов Tree и почти 20 видов Gimple: в среднем конце GCC Tree представляют операнды и объявления, а gimple представляют инструкции.Преимущество этого подхода состоит в том, что после того, как вы это сделаете, ваше расширение сможет обрабатывать любое программное обеспечение, приемлемое для компилятора.Недостатком является сложность внутренних представлений компиляторов (что объясняется сложностью определений исходных языков C & C ++, принятых компиляторами, а также сложностью генерируемого ими целевого машинного кода и увеличивающимся расстояниеммежду исходным и целевым языками).
Так что взломать общий компилятор (будь то GCC или LLVM) или статический анализатор (например, Frama-C) - довольно большая задача (более месяца работы,не несколько дней).Работать только с крошечными C ++ программами, которые вы показываете, не стоит.Но это определенно стоит усилий, если вы имеете дело с большими исходными базами программного обеспечения.
С уважением