Я пытаюсь выяснить, являются ли входные аргументы вызываемой функции нулевыми константами или нет.
В основном я использую логическую функцию, которая выглядит следующим образом:
bool isNullArg(Expr* arg) {
return arg->isNullPointerConstant(CI.getASTContext(),
Expr::NullPointerConstantValueDependence::NPC_ValueDependentIsNotNull) !=
Expr::NullPointerConstantKind::NPCK_NotNull);
}
Этот кодработает хорошо (ну, как я и ожидал ... isNullArg () возвращает true) в исходном коде C, подобном следующему:
#include <stdio.h>
void f(void *arg) {}
int main() {
f(NULL);
}
=> это указывает на то, что единственный аргумент, переданный вызову функции f, являетсянулевая константа.Хорошо.
Однако, если параметр приведен, например, следующим образом ...:
f((void*)NULL);
... my isNullArg () возвращает значение false.
Iиспользуйте clang 5.0 и llvm 5.0.
На 2 приведенных примерах я ожидаю, что isNullArg () вернет true, но возвращается только true, если аргумент не приведен.Может ли кто-нибудь предоставить некоторую информацию об этом поведении?