Expr :: isNullPointer如果转换了表达式,则常量行为会更改

时间:2019-01-23 15:21:10

标签: clang

我试图找出被调用函数的输入参数是否为空常量。

基本上,我使用如下所示的布尔函数:

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。 有人可以提供有关此行为的一些信息吗?

0 个答案:

没有答案