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

Reply via email to