尽管使用" clang -g -S -emit-llvm"生成IR,getMetadata(" dbg")仍会返回NULL

时间:2014-04-15 16:22:29

标签: clang llvm

我正在尝试获取指令的行信息。 我有

const CallInst* callInst = dyn_cast<const CallInst>(&*I);
MDNode *N = callInst->getMetadata("dbg");

N显然是NULL,但是我用“clang -g -S -emit-llvm”编译了输入IR 有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

可能您的指令与源程序的任何语句都不对应,因此没有调试元数据。

例如,它是由一个或另一个优化生成的,因为传递-emit-llvm不仅会发出llvm,而且会首先对您的程序应用优化包。

排除优化影响并在前端执行clang -g -S -emit-llvm -mllvm -disable-llvm-optzns后查看纯代码,并确保您的指令具有所需的元数据。