【发布时间】:2017-02-03 13:53:18
【问题描述】:
谁能帮我找到来自LLVM-IR的printf()调用的实际参数名称。
例如:我在程序中有printf("%d,%d,x,y); 语句。
我正在编写 LLVM 传递以查找实际参数名称(上例中的 x 和 y)。
【问题讨论】:
-
请查看stackoverflow.com/help/mcve 了解如何创建最小、完整且可验证的示例
标签: llvm llvm-clang
谁能帮我找到来自LLVM-IR的printf()调用的实际参数名称。
例如:我在程序中有printf("%d,%d,x,y); 语句。
我正在编写 LLVM 传递以查找实际参数名称(上例中的 x 和 y)。
【问题讨论】:
标签: llvm llvm-clang
一种方法是使用CallExpr 来识别 printf 调用。
您将使用 getArgs() 而不是 getArg(0) 并使用迭代器来解析参数。
const Expr* expr = CE->getArg(0); //CE is the CallExpr for printf
if (const ImplicitCaseExpr* ICE =
llvm::dyn_cast<ImplicitCastExpr>(expr)) {
const Expr* DRE_VAR = ICE->getSubExpr();
//now, cast and parse the AST
}
编辑:几个月后看看这个,我可以告诉你,唯一的方法就是你做占位符映射。
【讨论】: