Мне нужно сбросить живучесть блока исходного кода, используя API clang. Я попытался напечатать живость блока, но безуспешно. Ниже приведен код, который я пробовал
bool MyASTVisitor::VisitFunctionDecl(FunctionDecl *f) {
std::cout<<"Dump Liveness\n";
clang::AnalysisDeclContextManager adcm;
clang::AnalysisDeclContext *adc = adcm.getContext(llvm::cast<clang::Decl>(f));
//clang::LiveVariables *lv = clang::LiveVariables::create(*adc);
//clang::LiveVariables *lv = clang::LiveVariables::computeLiveness(*adc,false);
clang::LiveVariables *lv = adc->getAnalysis<LiveVariables>();
clang::LiveVariables::Observer *obs = new clang::LiveVariables::Observer();
lv->runOnAllBlocks(*obs);
lv->dumpBlockLiveness((f->getASTContext()).getSourceManager());
return true;
}
Я переопределил функции посетителя и попытался распечатать живость функции. Я пытался использовать методы create, calculateLiveness и getAnalysis для получения объекта LiveVariables, но все подходы не увенчались успехом. Однако никакая информация о живости не отображается, кроме номеров блоков.
Когда я использую аргументы командной строки clang для печати живости, он правильно отображает вывод.
В качестве тестового примера я использую следующий исходный код, взятый из Википедия по анализу переменных в реальном времени .
int main(int argc, char *argv[])
{
int a,b,c,d,x;
a = 3;
b = 5;
d = 4;
x = 100;
if(a>b){
c = a+b;
d = 2;
}
c = 4;
return b * d + c;
}
Может кто-нибудь указать, где я могу ошибаться? Заранее спасибо.