"*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:

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.


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


[1] Integer literal - cppreference.com