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

Hi All,

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

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 the cout is skipped.

Please help me root cause this issue.

Thanks,
Devendran.

As explained in [1], there are no negative integer literals. What you
should match for is an UnaryOperator of a (postive) IntegerLiteral

Michael

[1] Integer literal - cppreference.com