C++ 在llvm中标识常量值

C++ 在llvm中标识常量值,c++,llvm,C++,Llvm,我正在编写一个条件,以查看const llvm::Value*是否为常量。代码如下: if(const Constant* c = dynamic_cast<Constant>(val)){ ...... } if(常数*c=dynamic_cast(val)){ ...... } “val”这里是一个常量llvm::Value*,然而,编译器说 error: 'llvm::Constant' is not a reference or pointer if(const

我正在编写一个条件,以查看const llvm::Value*是否为常量。代码如下:

if(const Constant* c = dynamic_cast<Constant>(val)){
    ......
}
if(常数*c=dynamic_cast(val)){
......
}
“val”这里是一个常量llvm::Value*,然而,编译器说

error: 'llvm::Constant' is not a reference or pointer
if(const Constant* c = dynamic_cast<Constant>(val)){
                       ^           ~~~~~~~~~~
错误:“llvm::Constant”不是引用或指针
if(常数*c=动态(val)){
^           ~~~~~~~~~~

如何修改它?

dynamic\u cast
中使用的类型必须是指针或引用类型。我猜您也希望保持
常量

试试这个:

dynamic_cast<const Constant*>(val)
//           ^^^^^         ^
dynamic_cast(val)
//           ^^^^^         ^

如果不需要在If块中使用常量,则可以使用isa()

if(isa(val)){……}

仍然不工作,但是dyn_cast(val)可以编译,我还没有检查它的正确性。抱歉,我没有意识到您需要llvm
dyn_cast
函数看起来就像直接切换到
dyn_cast(val)
正是您想要的
if(isa<Constant>(val)){ ...... }