使用Clang 18的opt获取控制流图时出现-opaque-pointers问题
解决Clang 18 opt工具生成CFG时的opaque-pointers报错问题
Clang 18默认启用了**opaque pointers(透明指针)**特性,生成的LLVM IR会使用ptr类型而非传统的带类型指针(比如i32*)。但opt工具默认未开启opaque pointers模式,无法识别ptr类型,因此抛出报错。
以下两种方法可解决该问题:
方法一:生成LLVM IR时关闭opaque pointers
在编译生成IR的命令中添加-Xclang -no-opaque-pointers参数,强制生成兼容旧模式的IR:
clang -S -emit-llvm -Xclang -no-opaque-pointers example.c -o example.ll
之后正常运行opt生成CFG即可:
opt -dot-cfg example.ll
方法二:运行opt时启用opaque pointers模式
保持原IR生成命令不变:
clang -S -emit-llvm example.c -o example.ll
执行opt时添加-opaque-pointers参数,让工具适配新的指针格式:
opt -opaque-pointers -dot-cfg example.ll
执行成功后,当前目录会生成对应函数的CFG dot文件(如foo.dot、main.dot),可通过dot工具转换为可视化图片:
dot -Tpng foo.dot -o foo.png
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

