On Oct 7, 2008, at 3:06 AM, Zhongxing Xu wrote:
> if (!memcmp(s, "panic", 5)) Builder->BuildSinks = true;
> + else if (!memcmp(s, "error", 5)) {
> + Expr* Arg = *CE->arg_begin();
> + if (IntegerLiteral* IL = dyn_cast<IntegerLiteral>(Arg))
> + if (IL->getValue() != 0)
> + Builder->BuildSinks = true;
> + }
> break;
Hi Zhongxing,
I think this code will crash if error() isn't passed any arguments.
It should check to see if error() has the number of arguments that you
expect.
Also, is there a reason you check the AST node for an IntegerLiteral
instead of just consulting the value of 'CE' that is in the state?
You'll get far more accurate information by looking at the semantics
of the argument instead of its syntax.
For example, checking for an integer literal will miss the following
cases:
error(1 - 1);
error((1)); // note the '()'
x = 1;
error(x);
I think just doing GetRVal(St, CE) should do the trick.
Ted
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits