Изменение поведения Expr :: isNullPointerConstant при приведении выражения - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь выяснить, являются ли входные аргументы вызываемой функции нулевыми константами или нет.

В основном я использую логическую функцию, которая выглядит следующим образом:

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, если аргумент не приведен.Может ли кто-нибудь предоставить некоторую информацию об этом поведении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...