C++ LLVM检查指针类型是否为常量指针

C++ LLVM检查指针类型是否为常量指针,c++,llvm,llvm-ir,llvm-c++-api,C++,Llvm,Llvm Ir,Llvm C++ Api,我需要知道,给定LLVM类型的函数参数是否实际上是常量指针 有没有办法在LLVM中检查这一点?您想要的可能是和。例如,这里检查被调用函数的返回值是否可以为null: foo = called->hasAttribute(AttributeList::ReturnIndex, llvm::Attribute::NonNull) 这将检查特定值是否为常量参数 isa<Argument>(value) && cast<Argument>(value)-&

我需要知道,给定LLVM类型的函数参数是否实际上是常量指针

有没有办法在LLVM中检查这一点?

您想要的可能是和。例如,这里检查被调用函数的返回值是否可以为null:

foo = called->hasAttribute(AttributeList::ReturnIndex, llvm::Attribute::NonNull)
这将检查特定值是否为常量参数

isa<Argument>(value) && cast<Argument>(value)->onlyReadsMemory()
isa(值)&&cast(值)->onlyreadsmomery()

好吧,假设我知道你所说的常数指针是什么意思。康斯特内斯有这么多深浅的含义……

我认为这在某种程度上是可行的。但是,您知道为什么某些函数参数(使用CallInst中的GetArgOperator获取)不是“参数”吗?因为没有特别的理由。在C代码中,例如
extern inta(int,int);int b(int c){return a(c,42};
编译代码中
b
CallInst
将包含一个
参数和一个
ConstantInt
,因为第一个参数是
b()
的参数。如果想了解
a
的属性,必须调用
hasaAttribute()
在它上面,而不是
CallInst
上。
CallInst
的属性与调用相关,而不是与调用的函数相关。感谢您的解释!