"auto *IL = dyn_cast<IntegerLiteral>(e); " IL becomes NULL fails for negative integers.

Hi All,

I need a support to find the below *IL null pointer return for negative

integer numbers.

Checker code:

const Expr *e = vDecl->getInit();

auto *IL = dyn_cast(e);

if(IL !=NULL)

{

double val = IL->getValue().signedRoundToDouble();

cout << “val:” val;

}

test function:

main()

{

int val = 100; (int val = -100;)

printf("%d", val);

}

if the local variable is positive ex: int var 100; then cout prints the

right value “100”.

But if the local variable is negative ex: int var -100; then IL becomes

NULL and cout is not executed.

Please help me root cause this issue.

Thanks,

Devendran.

The -100 is not the integer literal for 100 less than 0. It is the application of the unary operator ‘-’ to the integer literal 100.

If you want to get the value, do the overload of isConstantExpr on Expr they takes a reference to APValue.

Hi All,

I need a support to find the below *IL null pointer return for negative

integer numbers.

Checker code:

const Expr *e = vDecl->getInit();

auto *IL = dyn_cast(e);

if(IL !=NULL)

{

double val = IL->getValue().signedRoundToDouble();

cout << “val:” val;

}

test function:

main()

{

int val = 100; (int val = -100;)

printf("%d", val);

}

if the local variable is positive ex: int var 100; then cout prints the

right value “100”.

But if the local variable is negative ex: int var -100; then IL becomes

NULL and cout is not executed.

Please help me root cause this issue.

Thanks,

Devendran.