我试图找出被调用函数的输入参数是否为空常量。
基本上,我使用如下所示的布尔函数:
bool isNullArg(Expr* arg) {
return arg->isNullPointerConstant(CI.getASTContext(),
Expr::NullPointerConstantValueDependence::NPC_ValueDependentIsNotNull) !=
Expr::NullPointerConstantKind::NPCK_NotNull);
}
在这样的C源代码上,此代码可以正常工作(好吧,正如我所期望的... isNullArg()返回true):
#include <stdio.h>
void f(void *arg) {}
int main() {
f(NULL);
}
=>表示传递给f函数调用的单个参数是一个空常量。好。
但是,如果强制转换参数,如下所示:
f((void*)NULL);
...我的isNullArg()函数返回false。
我使用clang 5.0和llvm 5.0。
在提供的2个示例中,我希望isNullArg()返回true,但仅在不强制转换参数的情况下返回true。 有人可以提供有关此行为的一些信息吗?