我可以使用 getCalledFunction() 在这个 IR 调用指令中轻松找到免费的:
call void @free(i8* %10) #4, !dbg !53
但是,我似乎不知道如何在此调用指令中找到它:
%call7 = call i32 bitcast (i32 (...)* @free to i32 (%struct.Bar*)*)(%struct.Bar* %7), !dbg !56
该指令将 BitCast 与调用指令组合在一起。我不确定“组合”是否是正确的短语,但是,我如何在这里检测到免费?
我尝试了 dyn_cast 到 Bitcast,但它不是。我什至首先使用了 getCalledOperand() 并尝试将我从它获得的值转换为 BitCast,但它仍然没有检测到它。我将不胜感激。
谢谢!
@arnt 在评论中回答了这个问题,所以我为其他人添加了答案。
@arnt:调用的第一个参数是一个 ConstantExpr,由 getBitCast 返回。cast(foo)->getOperand(0) 将返回免费的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句